Skip to content

Commit

Permalink
portability: Use GLib's sprintf()
Browse files Browse the repository at this point in the history
  • Loading branch information
oleavr committed Jan 6, 2025
1 parent 6a5a46c commit b7a3752
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 25 deletions.
23 changes: 12 additions & 11 deletions bindings/gumjs/gumquickcore.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#ifdef HAVE_PTRAUTH
# include <ptrauth.h>
#endif
#include <glib/gprintf.h>

#define GUM_QUICK_FFI_FUNCTION_PARAMS_EMPTY { NULL, }

Expand Down Expand Up @@ -2880,11 +2881,11 @@ GUMJS_DEFINE_FUNCTION (gumjs_int64_to_string)
return _gum_quick_throw_literal (ctx, "unsupported radix");

if (radix == 10)
sprintf (str, "%" G_GINT64_FORMAT, value);
g_sprintf (str, "%" G_GINT64_FORMAT, value);
else if (value >= 0)
sprintf (str, "%" G_GINT64_MODIFIER "x", value);
g_sprintf (str, "%" G_GINT64_MODIFIER "x", value);
else
sprintf (str, "-%" G_GINT64_MODIFIER "x", -value);
g_sprintf (str, "-%" G_GINT64_MODIFIER "x", -value);

return JS_NewString (ctx, str);
}
Expand All @@ -2897,7 +2898,7 @@ GUMJS_DEFINE_FUNCTION (gumjs_int64_to_json)
if (!_gum_quick_int64_unwrap (ctx, this_val, core, &self))
return JS_EXCEPTION;

sprintf (str, "%" G_GINT64_FORMAT, self->value);
g_sprintf (str, "%" G_GINT64_FORMAT, self->value);

return JS_NewString (ctx, str);
}
Expand Down Expand Up @@ -3036,9 +3037,9 @@ GUMJS_DEFINE_FUNCTION (gumjs_uint64_to_string)
return _gum_quick_throw_literal (ctx, "unsupported radix");

if (radix == 10)
sprintf (str, "%" G_GUINT64_FORMAT, value);
g_sprintf (str, "%" G_GUINT64_FORMAT, value);
else
sprintf (str, "%" G_GINT64_MODIFIER "x", value);
g_sprintf (str, "%" G_GINT64_MODIFIER "x", value);

return JS_NewString (ctx, str);
}
Expand All @@ -3051,7 +3052,7 @@ GUMJS_DEFINE_FUNCTION (gumjs_uint64_to_json)
if (!_gum_quick_uint64_unwrap (ctx, this_val, core, &self))
return JS_EXCEPTION;

sprintf (str, "%" G_GUINT64_FORMAT, self->value);
g_sprintf (str, "%" G_GUINT64_FORMAT, self->value);

return JS_NewString (ctx, str);
}
Expand Down Expand Up @@ -3334,14 +3335,14 @@ GUMJS_DEFINE_FUNCTION (gumjs_native_pointer_to_string)

if (radix == 10)
{
sprintf (str, "%" G_GSIZE_MODIFIER "u", ptr_bits);
g_sprintf (str, "%" G_GSIZE_MODIFIER "u", ptr_bits);
}
else
{
if (radix_specified)
sprintf (str, "%" G_GSIZE_MODIFIER "x", ptr_bits);
g_sprintf (str, "%" G_GSIZE_MODIFIER "x", ptr_bits);
else
sprintf (str, "0x%" G_GSIZE_MODIFIER "x", ptr_bits);
g_sprintf (str, "0x%" G_GSIZE_MODIFIER "x", ptr_bits);
}

return JS_NewString (ctx, str);
Expand All @@ -3355,7 +3356,7 @@ GUMJS_DEFINE_FUNCTION (gumjs_native_pointer_to_json)
if (!_gum_quick_native_pointer_unwrap (ctx, this_val, core, &self))
return JS_EXCEPTION;

sprintf (str, "0x%" G_GSIZE_MODIFIER "x", GPOINTER_TO_SIZE (self->value));
g_sprintf (str, "0x%" G_GSIZE_MODIFIER "x", GPOINTER_TO_SIZE (self->value));

return JS_NewString (ctx, str);
}
Expand Down
3 changes: 2 additions & 1 deletion bindings/gumjs/gumquickeventsink.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#include "gumquickvalue.h"

#include <glib/gprintf.h>
#include <gum/gumspinlock.h>
#include <string.h>

Expand Down Expand Up @@ -339,7 +340,7 @@ gum_quick_js_event_sink_drain (GumQuickJSEventSink * self)
g_hash_table_iter_init (&iter, frequencies);
while (g_hash_table_iter_next (&iter, &target, &count))
{
sprintf (target_str, "0x%" G_GSIZE_MODIFIER "x",
g_sprintf (target_str, "0x%" G_GSIZE_MODIFIER "x",
GPOINTER_TO_SIZE (target));
JS_DefinePropertyValueStr (ctx, summary,
target_str,
Expand Down
5 changes: 3 additions & 2 deletions bindings/gumjs/gumquickstalker.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2023 Ole André Vadla Ravnås <oleavr@nowsecure.com>
* Copyright (C) 2020-2024 Ole André Vadla Ravnås <oleavr@nowsecure.com>
*
* Licence: wxWindows Library Licence, Version 3.1
*/
Expand All @@ -10,6 +10,7 @@
#include "gumquickmacros.h"

#include <string.h>
#include <glib/gprintf.h>

#define GUM_QUICK_TYPE_TRANSFORMER (gum_quick_transformer_get_type ())
#define GUM_QUICK_TRANSFORMER_CAST(obj) ((GumQuickTransformer *) (obj))
Expand Down Expand Up @@ -1707,7 +1708,7 @@ gum_encode_pointer (JSContext * ctx,
{
gchar str[32];

sprintf (str, "0x%" G_GSIZE_MODIFIER "x", GPOINTER_TO_SIZE (value));
g_sprintf (str, "0x%" G_GSIZE_MODIFIER "x", GPOINTER_TO_SIZE (value));

return JS_NewString (ctx, str);
}
Expand Down
5 changes: 3 additions & 2 deletions gum/backend-darwin/gumdarwinsymbolicator.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

#include <CoreFoundation/CoreFoundation.h>
#include <dlfcn.h>
#include <glib/gprintf.h>

#define kCSNull ((CSTypeRef) { NULL, NULL })
#define kCSNow G_GUINT64_CONSTANT (0x8000000000000000)
Expand Down Expand Up @@ -387,7 +388,7 @@ gum_darwin_symbolicator_details_from_address (GumDarwinSymbolicator * self,
else if (!gum_darwin_symbolicator_synthesize_details_from_address (self,
address, details))
{
sprintf (details->symbol_name, "0x%zx",
g_sprintf (details->symbol_name, "0x%zx",
(size_t) ((unsigned long long) details->address -
CSSymbolOwnerGetBaseAddress (owner)));
}
Expand Down Expand Up @@ -578,7 +579,7 @@ gum_darwin_symbolicator_synthesize_details_from_address (
beach:
if (!success && module != NULL)
{
sprintf (details->symbol_name, "0x%zx (0x%zx)",
g_sprintf (details->symbol_name, "0x%zx (0x%zx)",
(size_t) (address - darwin_module->base_address),
(size_t) (darwin_module->preferred_address +
(address - darwin_module->base_address)));
Expand Down
18 changes: 9 additions & 9 deletions tests/gumjs/script.c
Original file line number Diff line number Diff line change
Expand Up @@ -1631,15 +1631,15 @@ TESTCASE (native_function_can_be_invoked_with_size_t)
* https://sourceware.org/bugzilla/show_bug.cgi?id=13575
*/

sprintf (ret, "\"%" G_GSIZE_MODIFIER "u\"", (gsize) SIZE_MAX);
g_sprintf (ret, "\"%" G_GSIZE_MODIFIER "u\"", (gsize) SIZE_MAX);
COMPILE_AND_LOAD_SCRIPT (
"const getSizeMax = new NativeFunction(" GUM_PTR_CONST ", 'size_t', []);"
"send(getSizeMax());",
gum_get_size_max);
EXPECT_SEND_MESSAGE_WITH (ret);
EXPECT_NO_MESSAGES ();

sprintf (arg, "%" G_GSIZE_MODIFIER "u", (gsize) (SIZE_MAX - 1));
g_sprintf (arg, "%" G_GSIZE_MODIFIER "u", (gsize) (SIZE_MAX - 1));
COMPILE_AND_LOAD_SCRIPT (
"const addSize = new NativeFunction(" GUM_PTR_CONST ", 'size_t', "
"['size_t']);"
Expand All @@ -1648,7 +1648,7 @@ TESTCASE (native_function_can_be_invoked_with_size_t)
EXPECT_SEND_MESSAGE_WITH (ret);
EXPECT_NO_MESSAGES ();

sprintf (arg, "%" G_GSIZE_MODIFIER "u", (gsize) SIZE_MAX);
g_sprintf (arg, "%" G_GSIZE_MODIFIER "u", (gsize) SIZE_MAX);
COMPILE_AND_LOAD_SCRIPT (
"const testSizeMax = new NativeFunction(" GUM_PTR_CONST ", 'bool', "
"['size_t']);"
Expand All @@ -1657,8 +1657,8 @@ TESTCASE (native_function_can_be_invoked_with_size_t)
EXPECT_SEND_MESSAGE_WITH ("true");
EXPECT_NO_MESSAGES ();

sprintf (arg, "%" G_GSIZE_MODIFIER "u", (gsize) SIZE_MAX);
sprintf (ret, "\"%" G_GSIZE_MODIFIER "u\"", (gsize) SIZE_MAX);
g_sprintf (arg, "%" G_GSIZE_MODIFIER "u", (gsize) SIZE_MAX);
g_sprintf (ret, "\"%" G_GSIZE_MODIFIER "u\"", (gsize) SIZE_MAX);
COMPILE_AND_LOAD_SCRIPT (
"const passSize = new NativeFunction(" GUM_PTR_CONST ", 'size_t', "
"['size_t']);"
Expand All @@ -1668,8 +1668,8 @@ TESTCASE (native_function_can_be_invoked_with_size_t)
EXPECT_NO_MESSAGES ();

#ifndef _MSC_VER
sprintf (arg, "%td", (ptrdiff_t) PTRDIFF_MAX);
sprintf (ret, "\"%td\"", (ptrdiff_t) PTRDIFF_MAX);
g_sprintf (arg, "%td", (ptrdiff_t) PTRDIFF_MAX);
g_sprintf (ret, "\"%td\"", (ptrdiff_t) PTRDIFF_MAX);
COMPILE_AND_LOAD_SCRIPT (
"const passSSize = new NativeFunction(" GUM_PTR_CONST ", 'ssize_t', "
"['ssize_t']);"
Expand All @@ -1678,8 +1678,8 @@ TESTCASE (native_function_can_be_invoked_with_size_t)
EXPECT_SEND_MESSAGE_WITH (ret);
EXPECT_NO_MESSAGES ();

sprintf (arg, "%" G_GSIZE_MODIFIER"d", (gsize) PTRDIFF_MIN);
sprintf (ret, "\"%" G_GSIZE_MODIFIER "d\"", (gsize) PTRDIFF_MIN);
g_sprintf (arg, "%" G_GSIZE_MODIFIER"d", (gsize) PTRDIFF_MIN);
g_sprintf (ret, "\"%" G_GSIZE_MODIFIER "d\"", (gsize) PTRDIFF_MIN);
COMPILE_AND_LOAD_SCRIPT (
"const passSSize = new NativeFunction(" GUM_PTR_CONST ", 'ssize_t', "
"['ssize_t']);"
Expand Down

0 comments on commit b7a3752

Please sign in to comment.