aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2022-11-22 10:08:49 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2022-11-22 10:10:42 +0000
commita8178eb7264b6be494206d37141bd67827883488 (patch)
tree0a2c0ab68570f22c1302a9ccad09cbcd6311d7a7
parentb1c6bdab1b1e3686e7d6612ac5a6aaa5fb0dc22c (diff)
downloadports-a8178eb7264b6be494206d37141bd67827883488.tar.gz
ports-a8178eb7264b6be494206d37141bd67827883488.zip
sysutils/gdisk: fix memory corruption while using sgdisk command
while parsing arguments, the device (last argument) variable is reset before being used.
-rw-r--r--sysutils/gdisk/Makefile2
-rw-r--r--sysutils/gdisk/files/patch-gptcl.cc33
2 files changed, 34 insertions, 1 deletions
diff --git a/sysutils/gdisk/Makefile b/sysutils/gdisk/Makefile
index e3e3a34d3a94..52443cd3ee63 100644
--- a/sysutils/gdisk/Makefile
+++ b/sysutils/gdisk/Makefile
@@ -1,6 +1,6 @@
PORTNAME= gdisk
PORTVERSION= 1.0.9
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= sysutils
MASTER_SITES= SF/gptfdisk/gptfdisk/${PORTVERSION}
DISTNAME= gptfdisk-${PORTVERSION}
diff --git a/sysutils/gdisk/files/patch-gptcl.cc b/sysutils/gdisk/files/patch-gptcl.cc
new file mode 100644
index 000000000000..19e73564d9d0
--- /dev/null
+++ b/sysutils/gdisk/files/patch-gptcl.cc
@@ -0,0 +1,33 @@
+--- gptcl.cc.orig 2022-11-22 09:31:13 UTC
++++ gptcl.cc
+@@ -71,7 +71,7 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
+ uint64_t low, high, startSector, endSector, sSize, mainTableLBA;
+ uint64_t temp; // temporary variable; free to use in any case
+ char *device;
+- string cmd, typeGUID, name;
++ string cmd, typeGUID, name, devstr;
+ PartType typeHelper;
+
+ struct poptOption theOptions[] =
+@@ -156,9 +156,11 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
+
+ // Assume first non-option argument is the device filename....
+ device = (char*) poptGetArg(poptCon);
++ if (device != NULL)
++ devstr = device;
+ poptResetContext(poptCon);
+
+- if (device != NULL) {
++ if (devstr.empty()) {
+ JustLooking(); // reset as necessary
+ BeQuiet(); // Tell called functions to be less verbose & interactive
+ if (LoadPartitions(devstr)) {
+@@ -498,7 +500,7 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
+ cerr << "Error encountered; not saving changes.\n";
+ retval = 4;
+ } // if
+- } // if (device != NULL)
++ } // if (devstr empty)
+ poptFreeContext(poptCon);
+ return retval;
+ } // GPTDataCL::DoOptions()