about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--frida_mode/include/util.h3
-rw-r--r--frida_mode/src/util.c26
2 files changed, 24 insertions, 5 deletions
diff --git a/frida_mode/include/util.h b/frida_mode/include/util.h
index 77491ea8..bcbdde26 100644
--- a/frida_mode/include/util.h
+++ b/frida_mode/include/util.h
@@ -8,8 +8,7 @@
 #define UNUSED_PARAMETER(x) (void)(x)
 #define IGNORED_RETURN(x) (void)!(x)
 
-guint64 util_read_address(char *key);
-
+guint64  util_read_address(char *key);
 guint64  util_read_num(char *key);
 gboolean util_output_enabled(void);
 gsize    util_rotate(gsize val, gsize shift, gsize size);
diff --git a/frida_mode/src/util.c b/frida_mode/src/util.c
index d84b7065..c9ef0edc 100644
--- a/frida_mode/src/util.c
+++ b/frida_mode/src/util.c
@@ -3,6 +3,7 @@
 guint64 util_read_address(char *key) {
 
   char *value_str = getenv(key);
+  char *end_ptr;
 
   if (value_str == NULL) { return 0; }
 
@@ -25,8 +26,17 @@ guint64 util_read_address(char *key) {
 
   }
 
-  guint64 value = g_ascii_strtoull(value_str2, NULL, 16);
-  if (value == 0) {
+  errno = 0;
+
+  guint64 value = g_ascii_strtoull(value_str2, &end_ptr, 16);
+
+  if (errno != 0) {
+
+    FATAL("Error (%d) during conversion: %s", errno, value_str);
+
+  }
+
+  if (value == 0 && end_ptr == value_str2) {
 
     FATAL("Invalid address failed hex conversion: %s=%s\n", key, value_str2);
 
@@ -39,6 +49,7 @@ guint64 util_read_address(char *key) {
 guint64 util_read_num(char *key) {
 
   char *value_str = getenv(key);
+  char *end_ptr;
 
   if (value_str == NULL) { return 0; }
 
@@ -53,8 +64,17 @@ guint64 util_read_num(char *key) {
 
   }
 
+  errno = 0;
+
   guint64 value = g_ascii_strtoull(value_str, NULL, 10);
-  if (value == 0) {
+
+  if (errno != 0) {
+
+    FATAL("Error (%d) during conversion: %s", errno, value_str);
+
+  }
+
+  if (value == 0 && end_ptr == value_str) {
 
     FATAL("Invalid address failed numeric conversion: %s=%s\n", key, value_str);