Fixed incorrect string length being stored
This commit is contained in:
		
							parent
							
								
									76bf452547
								
							
						
					
					
						commit
						586b2912be
					
				| @ -14,31 +14,34 @@ void ConstantPoolTags::ConstantPoolParser(ConstantPoolTags::Tags t, JavaClassFor | ||||
| 		case Tags::Utf8: { | ||||
| 			// std::cout << "FIXME: Implement Utf8 Constant Pool Tag" << std::endl;
 | ||||
| 			ConstantUtf8Info ref; | ||||
| 			std::vector<uint8_t> length = Utils::ReadFromStart(Globals::buffer(), 2); | ||||
| 			ref.length = Utils::ReadFromStartIntoVal<uint16_t>(Globals::buffer(), 2); | ||||
| 			// std::vector<uint8_t> length = Utils::ReadFromStart(Globals::buffer(), 2);
 | ||||
| 			ref.tag = t; | ||||
| 			ref.length = Utils::vecToVal<uint16_t>(length); | ||||
| 			// ref.length = Utils::vecToVal<uint16_t>(length);
 | ||||
| 
 | ||||
| 			unsigned char x = Utils::ReadFromStartIntoVal<unsigned char>(Globals::buffer(), 1); | ||||
| 			bool valid = true; | ||||
| 
 | ||||
| 			ref.bytes = new unsigned char[ref.length.ToHostFormat()]; | ||||
| 			unsigned char* bytes = new unsigned char[ref.length.ToHostFormat()]; | ||||
| 
 | ||||
| 			int len = 0; | ||||
| 
 | ||||
| 			for (int i = 0; i < ref.length.ToHostFormat(); i++) | ||||
| 			{ | ||||
| 				if ((x & 0x80) == 0) | ||||
| 				{ | ||||
| 					ref.bytes[i] = x; | ||||
| 					bytes[i] = x; | ||||
| 				} | ||||
| 				else if ((x & 0x800) == 0) | ||||
| 				{ | ||||
| 					unsigned char y = Utils::ReadFromStartIntoVal<unsigned char>(Globals::buffer(), 1); | ||||
| 					ref.bytes[i] = ((x & 0x1f) << 6) + (y & 0x3f); | ||||
| 					bytes[i] = ((x & 0x1f) << 6) + (y & 0x3f); | ||||
| 				} | ||||
| 				else if ((x & 0x10000) == 0) | ||||
| 				{ | ||||
| 					unsigned char y = Utils::ReadFromStartIntoVal<unsigned char>(Globals::buffer(), 1); | ||||
| 					unsigned char z = Utils::ReadFromStartIntoVal<unsigned char>(Globals::buffer(), 1); | ||||
| 					ref.bytes[i] = ((x & 0xf) << 12) + ((y & 0x3f) << 6) + (z & 0x3f); | ||||
| 					bytes[i] = ((x & 0xf) << 12) + ((y & 0x3f) << 6) + (z & 0x3f); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| @ -46,11 +49,20 @@ void ConstantPoolTags::ConstantPoolParser(ConstantPoolTags::Tags t, JavaClassFor | ||||
| 					exit(1); | ||||
| 				} | ||||
| 
 | ||||
| 				if (i != ref.length.ToHostFormat() - 1) | ||||
| 				if (i < ref.length.ToHostFormat() - 1) | ||||
| 					x = Utils::ReadFromStartIntoVal<unsigned char>(Globals::buffer(), 1); | ||||
| 
 | ||||
| 				len += 1; | ||||
| 			} | ||||
| 
 | ||||
| 			std::string bytes1; | ||||
| 			 | ||||
| 			bytes1.append(reinterpret_cast<const char*>(bytes), 0, len); | ||||
| 
 | ||||
| 			ref.bytes = bytes1; | ||||
| 			jc.constant_pool.push_back(ref); | ||||
| 
 | ||||
| 			ref.length = len; | ||||
| 			break; | ||||
| 		} | ||||
| 		case Tags::Integer: | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user