Skip to content

Commit 9a1b2c9

Browse files
committed
Fix codesigning our modified dylibs on macos
1 parent d20468a commit 9a1b2c9

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/copying/MachOFile.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -87,23 +87,16 @@ private void addCommand(MachODylibCommand cmd) throws IOException {
8787
var newBuffer = ByteBuffer.allocate(cmd.cmdSize);
8888
newBuffer.order(buffer.order());
8989
cmd.put(newBuffer);
90+
assert newBuffer.position() == cmd.cmdSize;
9091
newBuffer.position(0);
91-
loadCommands.add(MachOLoadCommand.get(newBuffer));
92+
var newCmd = MachOLoadCommand.get(newBuffer);
93+
loadCommands.add(newCmd);
94+
assert newCmd.cmdSize == cmd.cmdSize;
9295
mh.nCmds += 1;
9396
mh.sizeOfCmds += cmd.cmdSize;
9497
emptySpace -= cmd.cmdSize;
9598
}
9699

97-
private void removeCodeSignature() {
98-
for (int i = 0; i < loadCommands.size(); ++i) {
99-
var cmd = loadCommands.get(i);
100-
if (cmd.cmd == MachOLoadCommand.LC_CODE_SIGNATURE) {
101-
removeCommand(cmd);
102-
LOGGER.fine(() -> String.format("Removing code LC_CODE_SIGNATURE. New empty space is %d", emptySpace));
103-
}
104-
}
105-
}
106-
107100
private void removeId() {
108101
for (int i = 0; i < loadCommands.size(); ++i) {
109102
var cmd = loadCommands.get(i);
@@ -128,7 +121,6 @@ private void removeLoad(String oldName) {
128121

129122
@Override
130123
public void setId(String newId) throws IOException {
131-
removeCodeSignature();
132124
removeId();
133125

134126
var newCmd = new MachODylibCommand(MachODylibCommand.LC_ID_DYLIB, MachODylibCommand.SIZE, new byte[0], MachODylibCommand.SIZE, 0, 0, 0);
@@ -140,7 +132,6 @@ public void setId(String newId) throws IOException {
140132

141133
@Override
142134
public void changeOrAddDependency(String oldName, String newName) throws IOException {
143-
removeCodeSignature();
144135
removeLoad(oldName);
145136

146137
var newCmd = new MachODylibCommand(MachODylibCommand.LC_LOAD_DYLIB, MachODylibCommand.SIZE, new byte[0], MachODylibCommand.SIZE, 0, 0, 0);
@@ -154,9 +145,14 @@ public void changeOrAddDependency(String oldName, String newName) throws IOExcep
154145
public void write(TruffleFile copy) throws IOException, InterruptedException {
155146
buffer.position(0);
156147
mh.put(buffer);
148+
assert buffer.position() == MachOHeader.SIZE64;
157149
for (var cmd : loadCommands) {
158150
cmd.put(buffer);
159151
}
152+
assert buffer.position() == MachOHeader.SIZE64 + mh.sizeOfCmds;
153+
for (int i = 0; i < emptySpace; i++) {
154+
buffer.put((byte)0);
155+
}
160156

161157
try (var os = copy.newOutputStream(StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE)) {
162158
os.write(buffer.array());

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/copying/MachOLoadCommand.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ static MachOLoadCommand get(ByteBuffer buffer) {
7878
}
7979

8080
void put(ByteBuffer f) {
81+
content.position(0);
8182
f.put(content);
8283
}
8384
}

0 commit comments

Comments
 (0)