Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
5d7c99d
Rename tests/Unit/Models/test_vbaProject.py to tests/Unit/test_vbaPro…
Beakerboy Mar 2, 2026
f3c7257
Update reference_registered.py
Beakerboy Mar 2, 2026
22f6153
Update reference_registered.py
Beakerboy Mar 2, 2026
f009ed4
Update reference_registered.py
Beakerboy Mar 2, 2026
80966a6
Update reference_project.py
Beakerboy Mar 2, 2026
29fa3bb
Update reference_project.py
Beakerboy Mar 2, 2026
a0202d3
Update packed_data.py
Beakerboy Mar 2, 2026
8299698
Update reference.py
Beakerboy Mar 2, 2026
36d31b2
Update test_dirObject.pyt
Beakerboy Mar 2, 2026
d9338f0
Update test_reference.py
Beakerboy Mar 2, 2026
71fb97d
Update test_idSizeField.py
Beakerboy Mar 2, 2026
e31d78b
Update test_idSizeField.py
Beakerboy Mar 2, 2026
ecd03f8
Update test_idSizeField.py
Beakerboy Mar 2, 2026
e547996
Update test_idSizeField.py
Beakerboy Mar 2, 2026
edd2f93
Update test_idSizeField.py
Beakerboy Mar 2, 2026
f21a493
Update test_idSizeField.py
Beakerboy Mar 2, 2026
c0d7246
Update test_idSizeField.py
Beakerboy Mar 2, 2026
b13cced
Update test_idSizeField.py
Beakerboy Mar 2, 2026
a06dbaa
Update idSizeField.py
Beakerboy Mar 2, 2026
457b526
Update test_idSizeField.py
Beakerboy Mar 2, 2026
a5d43bb
Update doubleEncodedString.py
Beakerboy Mar 2, 2026
d7a15d7
Update idSizeField.py
Beakerboy Mar 2, 2026
93773ee
Update packed_data.py
Beakerboy Mar 2, 2026
f1244c2
Update test_idSizeField.py
Beakerboy Mar 2, 2026
558d040
Update test_reference.py
Beakerboy Mar 2, 2026
b198117
Update reference.py
Beakerboy Mar 2, 2026
f5f4d0d
Update test_reference.py
Beakerboy Mar 2, 2026
9188111
Update reference_project.py
Beakerboy Mar 2, 2026
adbf425
Update test_reference_project.py
Beakerboy Mar 2, 2026
bb3dc57
Update reference_registered.py
Beakerboy Mar 2, 2026
cd30c52
Update test_reference_registered.py
Beakerboy Mar 2, 2026
dbc4fcb
Update test_reference.py
Beakerboy Mar 2, 2026
a7ccd09
Update reference_registered.py
Beakerboy Mar 2, 2026
3c45d7f
Update test_reference_project.py
Beakerboy Mar 2, 2026
45de9c8
Update test_project_reference.py
Beakerboy Mar 2, 2026
693d2ec
Update test_project_reference.py
Beakerboy Mar 2, 2026
8a74790
Update doubleEncodedString.py
Beakerboy Mar 2, 2026
9c493c4
Create test_double_encoded_string.py
Beakerboy Mar 2, 2026
de49ef1
Update test_double_encoded_string.py
Beakerboy Mar 2, 2026
20b7ee5
Update test_double_encoded_string.py
Beakerboy Mar 2, 2026
6bf7eaa
Update test_project_reference.py
Beakerboy Mar 2, 2026
6628cf6
Update test_project_reference.py
Beakerboy Mar 2, 2026
cdea10d
Update test_project_reference.py
Beakerboy Mar 2, 2026
0294b14
Update test_project_reference.py
Beakerboy Mar 2, 2026
191ee00
Update dirStream.py
Beakerboy Mar 2, 2026
0ba33a2
Update and rename test_dirObject.pyt to test_dirObject.py
Beakerboy Mar 2, 2026
61fe4ea
Update test_dirObject.py
Beakerboy Mar 2, 2026
863ff82
Update idSizeField.py
Beakerboy Mar 2, 2026
c5f425a
Update packed_data.py
Beakerboy Mar 2, 2026
eb1918a
Update reference.py
Beakerboy Mar 2, 2026
09b0da6
Update reference.py
Beakerboy Mar 2, 2026
14cec35
Update module_base.py
Beakerboy Mar 2, 2026
f46dd3b
Update dirStream.py
Beakerboy Mar 2, 2026
46f1a7a
Update and rename test_fullFile.pyt to test_fullFile.py
Beakerboy Mar 2, 2026
c904e34
Update test_fullFile.py
Beakerboy Mar 2, 2026
720e53e
Update test_fullFile.py
Beakerboy Mar 2, 2026
251fe26
Update test_fullFile.py
Beakerboy Mar 2, 2026
b14c489
Update test_fullFile.py
Beakerboy Mar 3, 2026
416bfa4
Update test_fullFile.py
Beakerboy Mar 3, 2026
424fa24
Update test_fullFile.py
Beakerboy Mar 3, 2026
676a2ba
Update test_fullFile.py
Beakerboy Mar 3, 2026
57282b8
Update test_fullFile.py
Beakerboy Mar 3, 2026
92a613f
Update test_fullFile.py
Beakerboy Mar 3, 2026
8039a32
Update test_fullFile.py
Beakerboy Mar 3, 2026
583da8d
Update test_fullFile.py
Beakerboy Mar 3, 2026
e86225a
Update test_fullFile.py
Beakerboy Mar 3, 2026
3549935
Update test_fullFile.py
Beakerboy Mar 3, 2026
5e67745
Update test_fullFile.py
Beakerboy Mar 3, 2026
1210569
Update test_fullFile.py
Beakerboy Mar 3, 2026
adf2d0c
Update test_fullFile.py
Beakerboy Mar 3, 2026
9eb39fb
Update test_fullFile.py
Beakerboy Mar 3, 2026
dc60e77
Update test_fullFile.py
Beakerboy Mar 3, 2026
00df417
Update test_fullFile.py
Beakerboy Mar 3, 2026
8ad782f
Update test_fullFile.py
Beakerboy Mar 3, 2026
dac0b75
Update test_fullFile.py
Beakerboy Mar 3, 2026
54b8252
Update test_fullFile.py
Beakerboy Mar 3, 2026
2ae61ff
Update test_fullFile.py
Beakerboy Mar 3, 2026
15c3a05
Update test_fullFile.py
Beakerboy Mar 3, 2026
1ebe9d0
Update test_fullFile.py
Beakerboy Mar 3, 2026
356f0d4
Update test_fullFile.py
Beakerboy Mar 3, 2026
1146457
Update test_fullFile.py
Beakerboy Mar 3, 2026
1fb897e
Update test_fullFile.py
Beakerboy Mar 3, 2026
9445090
Update test_fullFile.py
Beakerboy Mar 3, 2026
991fb0c
Update test_fullFile.py
Beakerboy Mar 3, 2026
f0ae7d4
Update test_fullFile.py
Beakerboy Mar 3, 2026
c393410
Update test_fullFile.py
Beakerboy Mar 3, 2026
7e5fe64
Update test_fullFile.py
Beakerboy Mar 3, 2026
fd32269
Update test_fullFile.py
Beakerboy Mar 3, 2026
92b7f86
Update test_fullFile.py
Beakerboy Mar 3, 2026
4e3f0d3
Update test_fullFile.py
Beakerboy Mar 3, 2026
28dc93e
Update test_fullFile.py
Beakerboy Mar 3, 2026
8b14442
Update test_fullFile.py
Beakerboy Mar 3, 2026
20988ef
Update test_fullFile.py
Beakerboy Mar 3, 2026
24d378e
Update test_fullFile.py
Beakerboy Mar 3, 2026
19308b9
Update test_fullFile.py
Beakerboy Mar 3, 2026
dcc8f41
Update test_fullFile.py
Beakerboy Mar 3, 2026
6fdc3fc
Update test_fullFile.py
Beakerboy Mar 3, 2026
4d0f846
Update test_fullFile.py
Beakerboy Mar 3, 2026
aaeb230
Update test_fullFile.py
Beakerboy Mar 3, 2026
21b2286
Update test_fullFile.py
Beakerboy Mar 3, 2026
1a2c13d
Update test_fullFile.py
Beakerboy Mar 3, 2026
c1b1ca0
Update test_fullFile.py
Beakerboy Mar 3, 2026
9cdd7ae
Update test_fullFile.py
Beakerboy Mar 3, 2026
3cf570b
Update test_fullFile.py
Beakerboy Mar 3, 2026
662817d
Update test_fullFile.py
Beakerboy Mar 3, 2026
2f03be8
Update test_fullFile.py
Beakerboy Mar 3, 2026
5f6b03a
Update test_fullFile.py
Beakerboy Mar 3, 2026
fead870
Update test_fullFile.py
Beakerboy Mar 3, 2026
01fffd7
Update test_fullFile.py
Beakerboy Mar 3, 2026
fcafb93
Update test_fullFile.py
Beakerboy Mar 3, 2026
bacc232
Update test_fullFile.py
Beakerboy Mar 3, 2026
eefd982
Update test_fullFile.py
Beakerboy Mar 3, 2026
7e4a38c
Update test_fullFile.py
Beakerboy Mar 3, 2026
8bbcc52
Update test_fullFile.py
Beakerboy Mar 3, 2026
1bf80b0
Update test_fullFile.py
Beakerboy Mar 3, 2026
7db1c9d
Update test_fullFile.py
Beakerboy Mar 3, 2026
e64df06
Update test_fullFile.py
Beakerboy Mar 4, 2026
4154b96
Update test_fullFile.py
Beakerboy Mar 4, 2026
a153576
Update test_fullFile.py
Beakerboy Mar 4, 2026
716299e
Update test_fullFile.py
Beakerboy Mar 4, 2026
6887927
Update test_fullFile.py
Beakerboy Mar 4, 2026
a04a97d
Update test_fullFile.py
Beakerboy Mar 4, 2026
e91ec9d
Update test_fullFile.py
Beakerboy Mar 4, 2026
b54eee5
Update test_fullFile.py
Beakerboy Mar 4, 2026
0e9ee6c
Update test_fullFile.py
Beakerboy Mar 4, 2026
b4c7e30
Update test_fullFile.py
Beakerboy Mar 4, 2026
5eaa8a1
Update test_fullFile.py
Beakerboy Mar 4, 2026
1729909
Update test_fullFile.py
Beakerboy Mar 4, 2026
69bd4d0
Update test_fullFile.py
Beakerboy Mar 4, 2026
5781c86
Update test_fullFile.py
Beakerboy Mar 4, 2026
920f8e0
Update test_fullFile.py
Beakerboy Mar 4, 2026
de6b7d1
Update test_fullFile.py
Beakerboy Mar 4, 2026
628a8e5
Update test_fullFile.py
Beakerboy Mar 4, 2026
b5c8702
Update test_fullFile.py
Beakerboy Mar 4, 2026
0e58fa9
Update test_fullFile.py
Beakerboy Mar 4, 2026
ec9505b
Update test_fullFile.py
Beakerboy Mar 4, 2026
a2b5a8b
Update test_fullFile.py
Beakerboy Mar 4, 2026
2df69e1
Update test_fullFile.py
Beakerboy Mar 4, 2026
3fb40f5
Update test_fullFile.py
Beakerboy Mar 4, 2026
1f0a790
Update test_fullFile.py
Beakerboy Mar 4, 2026
e5dc3e5
Update test_fullFile.py
Beakerboy Mar 4, 2026
84f9cb8
Update test_fullFile.py
Beakerboy Mar 4, 2026
ea30d2c
Update test_fullFile.py
Beakerboy Mar 4, 2026
677066d
Update test_fullFile.py
Beakerboy Mar 4, 2026
7a29c88
Update test_fullFile.py
Beakerboy Mar 4, 2026
bd3a16a
Setters and getters
Beakerboy Mar 11, 2026
007e1a5
Update and rename test_vbaProject.pyt to test_vbaProject.py
Beakerboy Mar 11, 2026
c381a0c
Update test_vbaProject.py
Beakerboy Mar 11, 2026
49b29c4
Update test_vbaProject.py
Beakerboy Mar 11, 2026
171417a
Update test_vbaProject.py
Beakerboy Mar 12, 2026
6b9060f
Update test_vbaProject.py
Beakerboy Mar 12, 2026
3e7eab7
Update project_view.py
Beakerboy Mar 12, 2026
767cb28
Update project_view.py
Beakerboy Mar 12, 2026
4330c18
Update test_fullFile.py
Beakerboy Mar 12, 2026
200f08d
Update test_reference_registered.py
Beakerboy Mar 12, 2026
1ab5359
Update test_reference_registered.py
Beakerboy Mar 12, 2026
5e5d7b5
Update test_reference_registered.py
Beakerboy Mar 12, 2026
cf9e864
Update test_reference_registered.py
Beakerboy Mar 12, 2026
ef70975
Update test_dirObject.py
Beakerboy Mar 12, 2026
064e820
Update test_fullFile.py (#126)
Beakerboy Mar 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
run: |
pytest --cov=src
coveralls --service=github
ls -al

flake8:
runs-on: ubuntu-latest
Expand Down
64 changes: 39 additions & 25 deletions src/ms_ovba/Models/Entities/module_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def __init__(self: T, name: str) -> None:
self.streamName = DoubleEncodedString([0x001A, 0x0032], name)
self.docString = DoubleEncodedString([0x001C, 0x0048], "")
self.helpContext = IdSizeField(0x001E, 4, 0)
self.cookie = IdSizeField(0x002C, 2, 0xFFFF)
self._cookie = IdSizeField(0x002C, 2, 0xFFFF)

# self.readonly = SimpleRecord(0x001E, 4, helpContext)
# self.private = SimpleRecord(0x001E, 4, helpContext)
Expand All @@ -32,55 +32,69 @@ def __init__(self: T, name: str) -> None:
self._size = 0

# GUIDs
self._guid = []
self._guids = []

def set_guid(self: T, guid: str) -> None:
@property
def guids(self: T) -> str:
return self._guids

@guids.setter
def guids(self: T, guid: str) -> None:
if isinstance(guid, list):
self._guid = guid
self._guids = guid
else:
self._guid = [guid]
self._guids = [guid]

def add_guid(self: T, guid: str) -> None:
self._guid += guid

def set_cache(self: T, cache: bytes) -> None:
self._cache = cache
"""
Append a guid to the list
"""
self._guid += [guid]

def get_cache(self: T) -> bytes:
@property
def cache(self: T) -> bytes:
return self._cache

def set_cookie(self: T, value: int) -> None:
self.cookie = IdSizeField(0x002C, 2, value)
@cache.setter
def cache(self: T, cache: bytes) -> None:
self._cache = cache

@property
def cookie(self: T) -> int:
return self._cookie.value

def get_cookie(self: T) -> int:
return self.cookie.value
@cookie.setter
def cookie(self: T, value: int) -> None:
self._cookie = IdSizeField(0x002C, 2, value)

def get_name(self: T) -> str:
@property
def name(self: T) -> str:
return self.modName.value

def get_bin_path(self: T) -> str:
@property
def bin_path(self: T) -> str:
return self._file_path + ".bin"

def add_workspace(self: T, val1: int, val2: int,
val3: int, val4: int, val5: int) -> None:
self.workspace = [val1, val2, val3, val4, val5]

def pack(self: T, codepage_name: str, endien: str) -> bytes:
def pack(self: T, endien: str, cp_name: str) -> bytes:
"""
Pack the metadata for use in the dir stream.
"""
typeid_value = 0x0022 if self.type == 'Document' else 0x0021
type_id = PackedData("HI", typeid_value, 0)
self.offsetRec = IdSizeField(0x0031, 4, len(self._cache))
output = (self.modName.pack(codepage_name, endien)
+ self.streamName.pack(codepage_name, endien)
+ self.docString.pack(codepage_name, endien)
+ self.offsetRec.pack(codepage_name, endien)
+ self.helpContext.pack(codepage_name, endien)
+ self.cookie.pack(codepage_name, endien)
+ type_id.pack(codepage_name, endien))
output = (self.modName.pack(endien, cp_name)
+ self.streamName.pack(endien, cp_name)
+ self.docString.pack(endien, cp_name)
+ self.offsetRec.pack(endien)
+ self.helpContext.pack(endien, cp_name)
+ self._cookie.pack(endien)
+ type_id.pack(endien))
footer = PackedData("HI", 0x002B, 0)
output += footer.pack(codepage_name, endien)
output += footer.pack(endien)
return output

def to_project_module_string(self: T) -> str:
Expand Down
11 changes: 4 additions & 7 deletions src/ms_ovba/Models/Entities/reference.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,18 @@ class Reference():
"""
2.3.4.2.2.1 REFERENCE Record
"""
def __init__(self: T, codepage_name: str,
ref: ReferenceRecord,
def __init__(self: T, ref: ReferenceRecord,
name: str = None) -> None:
# is self._codepage_name even needed?
self._codepage_name = codepage_name
self._ref = ref
self._refname = name

def pack(self: T, cp_name: str, endien: str) -> bytes:
def pack(self: T, endien: str, cp_name: str) -> bytes:
name_pack = b''
if self._refname is not None:
name_de = DoubleEncodedString([0x0016, 0x003E], self._refname)
name_pack = name_de.pack(cp_name, endien)
name_pack = name_de.pack(endien, cp_name)

return name_pack + self._ref.pack(cp_name, endien)
return name_pack + self._ref.pack(endien, cp_name)

@staticmethod
def unpack(data: bytes, endien: str) -> T:
Expand Down
22 changes: 9 additions & 13 deletions src/ms_ovba/Models/Entities/reference_project.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import struct
from ms_ovba.Models.Entities.reference_record import ReferenceRecord
from ms_ovba.Models.Fields.project_reference import ProjectReference
from ms_ovba.Models.Fields.packed_data import PackedData
from typing import TypeVar


Expand All @@ -9,23 +9,19 @@

class ReferenceProject(ReferenceRecord):

def __init__(self: T, codepage_name: str,
ref: ProjectReference) -> None:
# is self._codepage_name even needed?
self._codepage_name = codepage_name
def __init__(self: T, ref: ProjectReference) -> None:
self._ref = ref

def pack(self: T, cp_name: str, endien: str) -> bytes:
def pack(self: T, endien: str, cp_name: str) -> bytes:
endien_symbol = '<' if endien == 'little' else '>'
lib_rel = self._ref.relative()
libid_abs_size = len(self._ref)
libid_rel_size = len(lib_rel)
format = ("HII" + str(libid_abs_size) + "sI" +
format = (endien_symbol + "HII" + str(libid_abs_size) + "sI" +
str(libid_rel_size) + "sIH")
ref_str = str(self._ref).encode(cp_name)
ref_str_rel = str(lib_rel).encode(cp_name)
ref_project = PackedData(format, 0x000E,
libid_abs_size + libid_rel_size + 14,
libid_abs_size, ref_str, libid_rel_size,
ref_str_rel, 0x65BE0257, 0x0017)

return (ref_project.pack(cp_name, endien))
return struct.pack(format, 0x000E,
libid_abs_size + libid_rel_size + 14,
libid_abs_size, ref_str, libid_rel_size,
ref_str_rel, 0x65BE0257, 0x0017)
19 changes: 7 additions & 12 deletions src/ms_ovba/Models/Entities/reference_registered.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import struct
from ms_ovba.Models.Entities.reference_record import ReferenceRecord
from ms_ovba.Models.Fields.libid_reference import LibidReference
from ms_ovba.Models.Fields.packed_data import PackedData
from typing import TypeVar


Expand All @@ -13,24 +12,20 @@ class ReferenceRegistered(ReferenceRecord):
2.3.4.2.2.5
Specifies a reference to an Automation type library.
"""
def __init__(self: T, codepage_name: str,
libid_ref: LibidReference) -> None:
# is self._codepage_name even needed?
self._codepage_name = codepage_name
def __init__(self: T, libid_ref: LibidReference) -> None:
self._libid_ref = libid_ref

@property
def libid(self: T) -> LibidReference:
return self._libid_ref

def pack(self: T, cp_name: str, endien: str) -> bytes:
def pack(self: T, endien: str, cp_name: str) -> bytes:
endien_symbol = '<' if endien == 'little' else '>'
strlen = len(self._libid_ref)
format = "HII" + str(strlen) + "sIH"
format = endien_symbol + "HII" + str(strlen) + "sIH"
lib_str = str(self._libid_ref).encode(cp_name)
ref_registered = PackedData(format, 0x000D, strlen + 10,
strlen, lib_str, 0, 0)

return ref_registered.pack(cp_name, endien)
return struct.pack(format, 0x000D, strlen + 10,
strlen, lib_str, 0, 0)

@staticmethod
def unpack(data: bytes, endien: str) -> T:
Expand Down Expand Up @@ -66,4 +61,4 @@ def unpack(data: bytes, endien: str) -> T:
pass

libid_ref = LibidReference.unpack(libid_ref_bytes)
return ReferenceRegistered("", libid_ref)
return ReferenceRegistered(libid_ref)
16 changes: 10 additions & 6 deletions src/ms_ovba/Models/Fields/doubleEncodedString.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,17 @@ class DoubleEncodedString():
"""
def __init__(self: T, ids: list, text: str) -> None:
self.ids = ids
self.value = text
self._value = text

def pack(self: T, codepage_name: str, endien: str) -> bytes:
encoded = self.value.encode(codepage_name)
@property
def value(self) -> str:
return self._value

def pack(self: T, endien: str, cp_name: str) -> bytes:
encoded = self._value.encode(cp_name)
self.mod_name1 = IdSizeField(self.ids[0], len(encoded), encoded)
format = "utf_16_le" if endien == 'little' else "utf_16_be"
encoded = self.value.encode(format)
encoded = self._value.encode(format)
self.mod_name2 = IdSizeField(self.ids[1], len(encoded), encoded)
return (self.mod_name1.pack(codepage_name, endien)
+ self.mod_name2.pack(codepage_name, endien))
return (self.mod_name1.pack(endien)
+ self.mod_name2.pack(endien))
9 changes: 6 additions & 3 deletions src/ms_ovba/Models/Fields/idSizeField.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,17 @@ def __init__(self: T, id: int, size: int, value: Any) -> None:
self._size = size
self._value = value

def pack(self: T, codepage_name: str, endien: str) -> bytes:
@property
def value(self: T) -> Any:
return self._value

def pack(self: T, endien: str, cp_name: str = None) -> bytes:
endien_symbol = '<' if endien == 'little' else '>'
format = endien_symbol + "HI"
if isinstance(self._value, str):
self.stringValue = self._value
self._value = bytes(self._value, encoding="ascii")
format += str(self._size) + "s"
elif isinstance(self._value, bytes):
if isinstance(self._value, bytes):
format += str(self._size) + "s"
elif self._size == 2:
format += "H"
Expand Down
6 changes: 4 additions & 2 deletions src/ms_ovba/Models/Fields/packed_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@

class PackedData():
"""
Multivalue field with a packing format
Multivalue field with a packing format.
This class allows a user to define a data format,
and render it at a later time.
"""
def __init__(self: T, format: str, *values: Any) -> None:
self.values = values
self.format = format

def pack(self: T, codepage_name: str, endien: str) -> bytes:
def pack(self: T, endien: str, cp_name: str = None) -> bytes:
endien_symbol = '<' if endien == 'little' else '>'
return struct.pack(endien_symbol + self.format, *self.values)
16 changes: 8 additions & 8 deletions src/ms_ovba/Views/dirStream.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,30 @@ class DirStream():

def __init__(self: T, project: VbaProject) -> None:
self.project = project
self._include_compat = False
self._include_compat = project.compat

def to_bytes(self: T) -> bytes:
information = self._load_information()
endien = self.project.endien
codepage_name = self.project.get_codepage_name()
cp_name = self.project.codepage_name
pack_symbol = '<' if endien == 'little' else '>'
# should be 0xFFFF
cookie_value = self.project.get_project_cookie()
cookie_value = self.project.project_cookie
self.project_cookie = IdSizeField(19, 2, cookie_value)
references = self.project.references
modules = self.project.modules
output = b''
for record in information:
output += record.pack(codepage_name, endien)
output += record.pack(endien, cp_name)
for record in references:
output += record.pack(codepage_name, endien)
output += record.pack(endien, cp_name)

modules_header = IdSizeField(0x000F, 2, len(modules))

output += (modules_header.pack(codepage_name, endien)
+ self.project_cookie.pack(codepage_name, endien))
output += (modules_header.pack(endien)
+ self.project_cookie.pack(endien))
for record in modules:
output += record.pack(codepage_name, endien)
output += record.pack(endien, cp_name)
output += struct.pack(pack_symbol + "HI", 16, 0)
return output

Expand Down
14 changes: 7 additions & 7 deletions src/ms_ovba/Views/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def __init__(self: T, project: VbaProject) -> None:
# Attributes

# A list of attributes and values
self.attributes = {}
self.attributes = project.attributes

# The HostExtenderInfo string
guid = "{3832D640-CF90-11CF-8E43-00A0C911005A}"
Expand All @@ -27,10 +27,10 @@ def add_attribute(self: T, name: str, value: str) -> None:

def to_bytes(self: T) -> bytes:
project = self.project
codepage_name = project.get_codepage_name()
codepage_name = project.codepage_name
# Use \x0D0A line endings...however python encodes that.
eol = b'\x0D\x0A'
project_id = project.get_project_id()
project_id = project.project_id
id = bytearray(project_id, codepage_name)
result = b'ID="' + id + b'"' + eol
modules = project.modules
Expand All @@ -42,10 +42,10 @@ def to_bytes(self: T) -> bytes:
result += self._attr(key, self.attributes[key])
cmg = ms_ovba_crypto.encrypt(
project_id,
project.get_protection_state()
project.protection_state
)
dpb = ms_ovba_crypto.encrypt(project_id, project.get_password())
gc = ms_ovba_crypto.encrypt(project_id, project.get_visibility_state())
dpb = ms_ovba_crypto.encrypt(project_id, project.password)
gc = ms_ovba_crypto.encrypt(project_id, project.visibility_state)
result += (bytes('CMG="', codepage_name)
+ binascii.hexlify(cmg).upper()
+ b'\x22\x0D\x0A')
Expand Down Expand Up @@ -74,7 +74,7 @@ def write_file(self: T) -> None:
bin_f.close()

def _attr(self: T, name: str, value: str) -> str:
codepage_name = self.project.get_codepage_name()
codepage_name = self.project.codepage_name
eol = b'\x0D\x0A'
b_name = bytes(name, codepage_name)
b_value = bytes(value, codepage_name)
Expand Down
4 changes: 2 additions & 2 deletions src/ms_ovba/Views/project_ole_file.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def _build_ole_directory(project: VbaProject) -> RootDirectory:
storage.set_modified(project.default_date)
for module in project.get_modules():
module.write_file()
dir = StreamDirectory(module.get_name(), module.get_bin_path())
dir = StreamDirectory(module.name, module.bin_path)
storage.add_directory(dir)

module = DirStream(project)
Expand All @@ -48,7 +48,7 @@ def _build_ole_directory(project: VbaProject) -> RootDirectory:

directory.add_directory(storage)

if project.get_include_projectwm():
if project.projectwm:
module = ProjectWm(project)
module.write_file()
stream = StreamDirectory("PROJECTwm", "projectwm.bin")
Expand Down
Loading
Loading