Skip to content

Commit 8cf3335

Browse files
committed
Use the JavaString type, as in the original project
1 parent 69c8c4e commit 8cf3335

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

javaobj.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,19 @@ def copy(self, new_object):
311311
new_object.__setattr__(name, getattr(self, name))
312312

313313

314+
class JavaString(str):
315+
"""
316+
Represents a Java String
317+
"""
318+
def __init__(self, *args, **kwargs):
319+
str.__init__(self, *args, **kwargs)
320+
321+
def __eq__(self, other):
322+
if not isinstance(other, str):
323+
return False
324+
return str.__eq__(self, other)
325+
326+
314327
class JavaEnum(JavaObject):
315328
"""
316329
Represents a Java enumeration
@@ -628,7 +641,7 @@ def do_classdesc(self, parent=None, ident=0):
628641
_, field_type = self._read_and_exec_opcode(
629642
ident=ident + 1,
630643
expect=(self.TC_STRING, self.TC_REFERENCE))
631-
assert type(field_type) is str
644+
assert type(field_type) is JavaString
632645
# if field_type is not None:
633646
# field_type = "array of " + field_type
634647
# else:
@@ -638,7 +651,7 @@ def do_classdesc(self, parent=None, ident=0):
638651
_, field_type = self._read_and_exec_opcode(
639652
ident=ident + 1,
640653
expect=(self.TC_STRING, self.TC_REFERENCE))
641-
assert type(field_type) is str
654+
assert type(field_type) is JavaString
642655

643656
log_debug("FieldName: 0x{0:X} Name:{1} Type:{2} ID:{3}"
644657
.format(typecode, field_name, field_type, fieldId),
@@ -824,7 +837,7 @@ def do_string(self, parent=None, ident=0):
824837
:return: A string
825838
"""
826839
log_debug("[string]", ident)
827-
ba = self._readString()
840+
ba = JavaString(self._readString())
828841
self._add_reference(ba, ident)
829842
return ba
830843

@@ -837,7 +850,7 @@ def do_string_long(self, parent=None, ident=0):
837850
:return: A string
838851
"""
839852
log_debug("[long string]", ident)
840-
ba = self._readString("Q")
853+
ba = JavaString(self._readString("Q"))
841854
self._add_reference(ba, ident)
842855
return ba
843856

@@ -1099,6 +1112,9 @@ def writeObject(self, obj):
10991112
elif isinstance(obj, JavaObject):
11001113
# Deserialized Java object
11011114
self.write_object(obj)
1115+
elif isinstance(obj, JavaString):
1116+
# Deserialized String
1117+
self.write_string(obj)
11021118
elif isinstance(obj, JavaClass):
11031119
# Java class
11041120
self.write_class(obj)
@@ -1325,6 +1341,8 @@ def _write_value(self, field_type, value):
13251341
self.write_enum(value)
13261342
elif isinstance(value, JavaObject):
13271343
self.write_object(value)
1344+
elif isinstance(value, JavaString):
1345+
self.write_string(value)
13281346
elif isinstance(value, str):
13291347
self.write_blockdata(value)
13301348
else:

0 commit comments

Comments
 (0)