Blob Blame History Raw
Patch also xrange to range to bring compatibility with python3
Link range to xrange when running in python2 for backwards compatibility
diff -ru officeparser-42c2d40372fe271f2039ca1adc145d2aef8c9545.old/officeparser.py officeparser-42c2d40372fe271f2039ca1adc145d2aef8c9545.new/officeparser.py
--- officeparser-42c2d40372fe271f2039ca1adc145d2aef8c9545.old/officeparser.py	2019-10-25 11:37:25.137270591 +0200
+++ officeparser-42c2d40372fe271f2039ca1adc145d2aef8c9545.new/officeparser.py	2019-10-25 12:15:53.596328846 +0200
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 # CHANGELOG:
+# 2019-10-25: - bring the python3 compatibility
 # 2014-08-15: - VBA: fixed incorrect value check in PROJECTHELPFILEPATH Record
 #             - VBA: fixed infinite loop when output file already exists
 #             - improved logging output, set default level to INFO
@@ -29,7 +29,11 @@
 
 BINFILE_NAME = "/vbaProject.bin"
 
-PY3 = sys.version_info[0] == 3
+PY3 = sys.version_info[0] >= 3
+
+# Python2 backwards compatibility
+if not PY3:
+    range=xrange
 
 def fat_value_to_str(value):
     if value == DIFSECT:
@@ -95,7 +100,7 @@
         while compressed_current < compressed_end:
             flag_byte = ord(compressed_container[compressed_current])
             compressed_current += 1
-            for bit_index in xrange(0, 8):
+            for bit_index in range(0, 8):
                 if compressed_current >= compressed_end:
                     break
                 if (1 << bit_index) & flag_byte == 0: # LiteralToken
@@ -114,7 +119,7 @@
                 temp2 = 16 - bit_count
                 offset = (temp1 >> temp2) + 1
                 copy_source = len(decompressed_container) - offset
-                for index in xrange(copy_source, copy_source + length):
+                for index in range(copy_source, copy_source + length):
                     decompressed_container += decompressed_container[index]
                 compressed_current += 2
 
@@ -568,17 +573,17 @@
         ofdoc.header.pretty_print()
 
     if options.print_directory:
-        for x in xrange(0, len(ofdoc.directory)):
+        for x in range(0, len(ofdoc.directory)):
             print("Directory Index {0:08X} ({0})".format(x))
             ofdoc.directory[x].pretty_print()
             print()
 
     if options.print_fat:
-        for sector in xrange(0, len(ofdoc.fat)):
+        for sector in range(0, len(ofdoc.fat)):
             print('{0:08X}: {1}'.format(sector, fat_value_to_str(ofdoc.fat[sector])))
 
     if options.print_mini_fat:
-        for sector in xrange(0, len(ofdoc.minifat)):
+        for sector in range(0, len(ofdoc.minifat)):
             print('{0:08X}: {1}'.format(sector, fat_value_to_str(ofdoc.minifat[sector])))
 
     if options.print_streams:
@@ -632,7 +637,7 @@
 
     invalid_fat_entries = 0
     if options.check_fat or options.print_invalid_fat_count:
-        for value in xrange(0, len(ofdoc.fat)):
+        for value in range(0, len(ofdoc.fat)):
             ptr = ofdoc.read_fat(value)
             if ptr == DIFSECT or ptr == FATSECT or ptr == ENDOFCHAIN or ptr == FREESECT:
                 continue
@@ -674,7 +679,7 @@
                 buffer[index] = True
                 index = ofdoc.read_fat(index)
 
-        for index in xrange(0, len(buffer)):
+        for index in range(0, len(buffer)):
             #logging.debug('{0:08X} {1} {2}'.format(index, buffer[index], fat_value_to_str(ofdoc.read_fat(index))))
             if ofdoc.read_fat(index) == FREESECT and buffer[index] == True:
                 logging.warning('FREESECT is marked as used')
@@ -1077,7 +1082,7 @@
         PROJECTMODULES_ProjectCookieRecord_Cookie = unpack("<H", dir_stream.read(2))[0]
 
         logging.debug("parsing {0} modules".format(PROJECTMODULES_Count))
-        for x in xrange(0, PROJECTMODULES_Count):
+        for x in range(0, PROJECTMODULES_Count):
             MODULENAME_Id = unpack("<H", dir_stream.read(2))[0]
             check_value('MODULENAME_Id', 0x0019, MODULENAME_Id)
             MODULENAME_SizeOfModuleName = unpack("<L", dir_stream.read(4))[0]