GP-0 fix 7z cli tool wrapper to parse version info better

This commit is contained in:
dev747368
2026-08-06 18:29:25 +00:00
parent 5b45a57296
commit 339050134d
2 changed files with 15 additions and 5 deletions

View File

@@ -37,7 +37,11 @@ public class SevenZipCliToolWrapper extends AbstractCliToolWrapper
private static final List<String> NATIVE_UNIX_EXE_NAMES = List.of("7zz", "7zzs", "7z");
private static final List<String> NATIVE_WIN_EXE_NAMES = List.of("7z.exe");
private static final Pattern SZ_VER_PATTERN =
Pattern.compile(".*7-Zip \\(z\\) ([0-9.]+) .*Copyright \\(c\\).*");
Pattern.compile(".*7-Zip " + // const prefix
"(\\(.\\) )?" + // optional "(a|r|z)" specifier, group=1
"([0-9.]+) " + // 7z version number, eg. 23.01, group=2
".*Copyright \\(c\\).*" // const sufix
);
private static final List<String> getCurrentOSNativeExeNames() {
return switch (OperatingSystem.CURRENT_OPERATING_SYSTEM) {
@@ -61,7 +65,7 @@ public class SevenZipCliToolWrapper extends AbstractCliToolWrapper
if (execAndReadStdOut(List.of("--help"), monitor, sb::append) == 0) {
Matcher m = SZ_VER_PATTERN.matcher(sb.toString());
if (m.matches()) {
SemVer ver = SemVer.parse(m.group(1));
SemVer ver = SemVer.parse(m.group(2));
return ver != SemVer.INVALID && ver.compareTo(MIN_SUPPORTED_VER) >= 0;
}
}

View File

@@ -15,12 +15,12 @@
*/
package pdb.symbolserver;
import static org.junit.Assert.assertEquals;
import java.util.List;
import static org.junit.Assert.*;
import static org.junit.Assume.*;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.junit.Before;
@@ -28,6 +28,7 @@ import org.junit.Test;
import com.google.common.io.BaseEncoding;
import ghidra.file.formats.sevenzip.SevenZipCliToolWrapper;
import ghidra.test.AbstractGhidraHeadedIntegrationTest;
import ghidra.util.exception.CancelledException;
import ghidra.util.task.TaskMonitor;
@@ -57,11 +58,16 @@ public class SymbolServerService2Test extends AbstractGhidraHeadedIntegrationTes
@Before
public void setup() throws IOException {
// Don't cause test failure if 7z cli tool isn't installed on test env
assumeTrue("Missing 7z cli tool in testing env PATH, skipping",
SevenZipCliToolWrapper.findTool(TaskMonitor.DUMMY) != null);
temporaryDir = createTempDirectory("symbolservers");
localSymbolStore1Root = new File(temporaryDir, "symbols1");
LocalSymbolStore.create(localSymbolStore1Root, 1);
localSymbolStore1 = new LocalSymbolStore(localSymbolStore1Root);
}
@Test