commit 1baee65ed638dedd3760e2de52fb3e2752b4bfba
parent 38b4a174f670fab4f3408fb1c440f0bebac315a2
Author: Michael Froman <mfroman@mozilla.com>
Date: Wed, 19 Nov 2025 15:55:27 +0000
Bug 2000995 - limit hops through NR_reg_get_{type} to call nr_reg_local_get_{type}. r=bwc
Differential Revision: https://phabricator.services.mozilla.com/D273137
Diffstat:
3 files changed, 88 insertions(+), 159 deletions(-)
diff --git a/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry.c b/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry.c
@@ -110,37 +110,50 @@ NR_reg_initted(void)
return reg_initted!=0;
}
-#define NRREGGET(func, method, type) \
+#define NRREGGET(func, TYPE, type) \
int \
func(NR_registry name, type *out) \
{ \
- return method(name, out); \
+ return nr_reg_get(name, TYPE, out); \
}
-NRREGGET(NR_reg_get_char, nr_reg_local_get_char, char)
-NRREGGET(NR_reg_get_uchar, nr_reg_local_get_uchar, UCHAR)
-NRREGGET(NR_reg_get_uint2, nr_reg_local_get_uint2, UINT2)
-NRREGGET(NR_reg_get_int4, nr_reg_local_get_int4, INT4)
-NRREGGET(NR_reg_get_uint4, nr_reg_local_get_uint4, UINT4)
-NRREGGET(NR_reg_get_uint8, nr_reg_local_get_uint8, UINT8)
-NRREGGET(NR_reg_get_double, nr_reg_local_get_double, double)
+NRREGGET(NR_reg_get_char, NR_REG_TYPE_CHAR, char)
+NRREGGET(NR_reg_get_uchar, NR_REG_TYPE_UCHAR, UCHAR)
+NRREGGET(NR_reg_get_uint2, NR_REG_TYPE_UINT2, UINT2)
+NRREGGET(NR_reg_get_int4, NR_REG_TYPE_INT4, INT4)
+NRREGGET(NR_reg_get_uint4, NR_REG_TYPE_UINT4, UINT4)
+NRREGGET(NR_reg_get_uint8, NR_REG_TYPE_UINT8, UINT8)
+NRREGGET(NR_reg_get_double, NR_REG_TYPE_DOUBLE, double)
int
NR_reg_get_registry(NR_registry name, NR_registry out)
{
- return nr_reg_local_get_registry(name, out);
+ int r, _status;
+ nr_scalar_registry_node *node = 0;
+ int free_node = 0;
+
+ if ((r=nr_reg_fetch_node(name, NR_REG_TYPE_REGISTRY, (void*)&node, &free_node)))
+ ABORT(r);
+
+ strncpy(out, name, sizeof(NR_registry));
+
+ _status=0;
+ abort:
+ if (free_node) RFREE(node);
+ return(_status);
+
}
int
NR_reg_get_bytes(NR_registry name, UCHAR *out, size_t size, size_t *length)
{
- return nr_reg_local_get_bytes(name, out, size, length);
+ return nr_reg_get_array(name, NR_REG_TYPE_BYTES, out, size, length);
}
int
NR_reg_get_string(NR_registry name, char *out, size_t size)
{
- return nr_reg_local_get_string(name, out, size);
+ return nr_reg_get_array(name, NR_REG_TYPE_STRING, (UCHAR*)out, size, 0);
}
int
@@ -149,29 +162,34 @@ NR_reg_get_length(NR_registry name, size_t *length)
return nr_reg_local_get_length(name, length);
}
-#define NRREGSET(func, method, type) \
+#define NRREGSET(func, TYPE, type) \
int \
func(NR_registry name, type data) \
{ \
- return method(name, data); \
+ return nr_reg_set(name, TYPE, &data); \
}
-NRREGSET(NR_reg_set_char, nr_reg_local_set_char, char)
-NRREGSET(NR_reg_set_uchar, nr_reg_local_set_uchar, UCHAR)
-NRREGSET(NR_reg_set_int4, nr_reg_local_set_int4, INT4)
-NRREGSET(NR_reg_set_uint4, nr_reg_local_set_uint4, UINT4)
-NRREGSET(NR_reg_set_string, nr_reg_local_set_string, char*)
+NRREGSET(NR_reg_set_char, NR_REG_TYPE_CHAR, char)
+NRREGSET(NR_reg_set_uchar, NR_REG_TYPE_UCHAR, UCHAR)
+NRREGSET(NR_reg_set_int4, NR_REG_TYPE_INT4, INT4)
+NRREGSET(NR_reg_set_uint4, NR_REG_TYPE_UINT4, UINT4)
+
+int
+NR_reg_set_string(NR_registry name, char *data)
+{
+ return nr_reg_set_array(name, NR_REG_TYPE_STRING, (UCHAR*)data, strlen(data)+1);
+}
int
NR_reg_set_registry(NR_registry name)
{
- return nr_reg_local_set_registry(name);
+ return nr_reg_set(name, NR_REG_TYPE_REGISTRY, 0);
}
int
NR_reg_set_bytes(NR_registry name, unsigned char *data, size_t length)
{
- return nr_reg_local_set_bytes(name, data, length);
+ return nr_reg_set_array(name, NR_REG_TYPE_BYTES, data, length);
}
diff --git a/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_int.h b/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_int.h
@@ -84,25 +84,55 @@ int nr_reg_get_client(CLIENT **client);
#define CALLBACK_SERVER_PORT 8082
#define CALLBACK_SERVER_BACKLOG 32
+/* if C were an object-oriented language, nr_scalar_registry_node and
+ * nr_array_registry_node would subclass nr_registry_node, but it isn't
+ * object-oriented language, so this is used in cases where the pointer
+ * could be of either type */
+typedef struct nr_registry_node_ {
+ unsigned char type;
+} nr_registry_node;
+
+typedef struct nr_scalar_registry_node_ {
+ unsigned char type;
+ union {
+ char _char;
+ UCHAR _uchar;
+ INT2 _nr_int2;
+ UINT2 _nr_uint2;
+ INT4 _nr_int4;
+ UINT4 _nr_uint4;
+ INT8 _nr_int8;
+ UINT8 _nr_uint8;
+ double _double;
+ } scalar;
+} nr_scalar_registry_node;
+
+/* string, bytes */
+typedef struct nr_array_registry_node_ {
+ unsigned char type;
+ struct {
+ unsigned int length;
+ unsigned char data[1];
+ } array;
+} nr_array_registry_node;
+
+typedef struct nr_reg_find_children_arg_ {
+ size_t size;
+ NR_registry *children;
+ size_t length;
+} nr_reg_find_children_arg;
+
int nr_reg_local_init(void);
-int nr_reg_local_get_char(NR_registry name, char *data);
-int nr_reg_local_get_uchar(NR_registry name, UCHAR *data);
-int nr_reg_local_get_uint2(NR_registry name, UINT2 *data);
-int nr_reg_local_get_int4(NR_registry name, INT4 *data);
-int nr_reg_local_get_uint4(NR_registry name, UINT4 *data);
-int nr_reg_local_get_uint8(NR_registry name, UINT8 *data);
-int nr_reg_local_get_double(NR_registry name, double *data);
-int nr_reg_local_get_registry(NR_registry name, NR_registry data);
-int nr_reg_local_get_bytes(NR_registry name, UCHAR *data, size_t size, size_t *length);
-int nr_reg_local_get_string(NR_registry name, char *data, size_t size);
+
+int nr_reg_get(char *name, int type, void *out);
+int nr_reg_get_array(char *name, unsigned char type, UCHAR *out, size_t size, size_t *length);
+
+int nr_reg_set(char *name, int type, void *data);
+int nr_reg_set_array(char *name, unsigned char type, UCHAR *data, size_t length);
+
+int nr_reg_fetch_node(char *name, unsigned char type, nr_registry_node **node, int *free_node);
+
int nr_reg_local_get_length(NR_registry name, size_t *len);
-int nr_reg_local_set_char(NR_registry name, char data);
-int nr_reg_local_set_uchar(NR_registry name, UCHAR data);
-int nr_reg_local_set_int4(NR_registry name, INT4 data);
-int nr_reg_local_set_uint4(NR_registry name, UINT4 data);
-int nr_reg_local_set_string(NR_registry name, char *data);
-int nr_reg_local_set_registry(NR_registry name);
-int nr_reg_local_set_bytes(NR_registry name, UCHAR *data, size_t length);
int nr_reg_local_del(NR_registry name);
int nr_reg_local_get_child_count(NR_registry parent, size_t *count);
int nr_reg_local_get_children(NR_registry parent, NR_registry *data, size_t size, size_t *length);
diff --git a/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c b/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c
@@ -66,47 +66,10 @@ static int nr_reg_local_compare_string(const void *arg1, const void *arg2) {
return strcasecmp(*(const char **)arg1, *(const char **)arg2);
}
-/* if C were an object-oriented language, nr_scalar_registry_node and
- * nr_array_registry_node would subclass nr_registry_node, but it isn't
- * object-oriented language, so this is used in cases where the pointer
- * could be of either type */
-typedef struct nr_registry_node_ {
- unsigned char type;
-} nr_registry_node;
-
-typedef struct nr_scalar_registry_node_ {
- unsigned char type;
- union {
- char _char;
- UCHAR _uchar;
- INT2 _nr_int2;
- UINT2 _nr_uint2;
- INT4 _nr_int4;
- UINT4 _nr_uint4;
- INT8 _nr_int8;
- UINT8 _nr_uint8;
- double _double;
- } scalar;
-} nr_scalar_registry_node;
-
-/* string, bytes */
-typedef struct nr_array_registry_node_ {
- unsigned char type;
- struct {
- unsigned int length;
- unsigned char data[1];
- } array;
-} nr_array_registry_node;
-
static int nr_reg_insert_node(char *name, void *node);
static int nr_reg_change_node(char *name, void *node, void *old);
-static int nr_reg_get(char *name, int type, void *out);
static int nr_reg_get_data(NR_registry name, nr_scalar_registry_node *node, void *out);
-static int nr_reg_get_array(char *name, unsigned char type, UCHAR *out, size_t size, size_t *length);
-static int nr_reg_set(char *name, int type, void *data);
-static int nr_reg_set_array(char *name, unsigned char type, UCHAR *data, size_t length);
static int nr_reg_set_parent_registries(char *name);
-int nr_reg_fetch_node(char *name, unsigned char type, nr_registry_node **node, int *free_node);
char *nr_reg_alloc_node_data(char *name, nr_registry_node *node, int *freeit);
static int nr_reg_rfree(void *ptr);
static int nr_reg_compute_length(char *name, nr_registry_node *node, size_t *length);
@@ -117,12 +80,6 @@ char *nr_reg_action_name(int action);
* nr_array_registry_node */
static r_assoc *nr_registry = 0;
-typedef struct nr_reg_find_children_arg_ {
- size_t size;
- NR_registry *children;
- size_t length;
-} nr_reg_find_children_arg;
-
static int nr_reg_local_iter(NR_registry prefix, int (*action)(void *ptr, r_assoc_iterator *iter, char *prefix, char *name, nr_registry_node *node), void *ptr);
static int nr_reg_local_iter_delete(void *ptr, r_assoc_iterator *iter, char *prefix, char *name, nr_registry_node *node);
static int nr_reg_local_find_children(void *ptr, r_assoc_iterator *iter, char *prefix, char *name, nr_registry_node *node);
@@ -797,7 +754,7 @@ nr_reg_local_init(void)
ABORT(r);
/* make sure NR_TOP_LEVEL_REGISTRY always exists */
- if ((r=nr_reg_local_set_registry(NR_TOP_LEVEL_REGISTRY)))
+ if ((r=NR_reg_set_registry(NR_TOP_LEVEL_REGISTRY)))
ABORT(r);
}
@@ -806,52 +763,6 @@ nr_reg_local_init(void)
return(_status);
}
-#define NRREGLOCALGET(func, TYPE, type) \
-int \
-func(NR_registry name, type *out) \
-{ \
- return nr_reg_get(name, TYPE, out); \
-}
-
-NRREGLOCALGET(nr_reg_local_get_char, NR_REG_TYPE_CHAR, char)
-NRREGLOCALGET(nr_reg_local_get_uchar, NR_REG_TYPE_UCHAR, UCHAR)
-NRREGLOCALGET(nr_reg_local_get_uint2, NR_REG_TYPE_UINT2, UINT2)
-NRREGLOCALGET(nr_reg_local_get_int4, NR_REG_TYPE_INT4, INT4)
-NRREGLOCALGET(nr_reg_local_get_uint4, NR_REG_TYPE_UINT4, UINT4)
-NRREGLOCALGET(nr_reg_local_get_uint8, NR_REG_TYPE_UINT8, UINT8)
-NRREGLOCALGET(nr_reg_local_get_double, NR_REG_TYPE_DOUBLE, double)
-
-int
-nr_reg_local_get_registry(NR_registry name, NR_registry out)
-{
- int r, _status;
- nr_scalar_registry_node *node = 0;
- int free_node = 0;
-
- if ((r=nr_reg_fetch_node(name, NR_REG_TYPE_REGISTRY, (void*)&node, &free_node)))
- ABORT(r);
-
- strncpy(out, name, sizeof(NR_registry));
-
- _status=0;
- abort:
- if (free_node) RFREE(node);
- return(_status);
-
-}
-
-int
-nr_reg_local_get_bytes(NR_registry name, UCHAR *out, size_t size, size_t *length)
-{
- return nr_reg_get_array(name, NR_REG_TYPE_BYTES, out, size, length);
-}
-
-int
-nr_reg_local_get_string(NR_registry name, char *out, size_t size)
-{
- return nr_reg_get_array(name, NR_REG_TYPE_STRING, (UCHAR*)out, size, 0);
-}
-
int
nr_reg_local_get_length(NR_registry name, size_t *length)
{
@@ -873,36 +784,6 @@ nr_reg_local_get_length(NR_registry name, size_t *length)
}
-#define NRREGLOCALSET(func, TYPE, type) \
-int \
-func(NR_registry name, type data) \
-{ \
- return nr_reg_set(name, TYPE, &data); \
-}
-
-NRREGLOCALSET(nr_reg_local_set_char, NR_REG_TYPE_CHAR, char)
-NRREGLOCALSET(nr_reg_local_set_uchar, NR_REG_TYPE_UCHAR, UCHAR)
-NRREGLOCALSET(nr_reg_local_set_int4, NR_REG_TYPE_INT4, INT4)
-NRREGLOCALSET(nr_reg_local_set_uint4, NR_REG_TYPE_UINT4, UINT4)
-
-int
-nr_reg_local_set_registry(NR_registry name)
-{
- return nr_reg_set(name, NR_REG_TYPE_REGISTRY, 0);
-}
-
-int
-nr_reg_local_set_bytes(NR_registry name, unsigned char *data, size_t length)
-{
- return nr_reg_set_array(name, NR_REG_TYPE_BYTES, data, length);
-}
-
-int
-nr_reg_local_set_string(NR_registry name, char *data)
-{
- return nr_reg_set_array(name, NR_REG_TYPE_STRING, (UCHAR*)data, strlen(data)+1);
-}
-
int
nr_reg_local_del(NR_registry name)
{
@@ -920,7 +801,7 @@ nr_reg_local_del(NR_registry name)
/* if deleting from the root, re-insert the root */
if (! strcasecmp(name, NR_TOP_LEVEL_REGISTRY)) {
- if ((r=nr_reg_local_set_registry(NR_TOP_LEVEL_REGISTRY)))
+ if ((r=NR_reg_set_registry(NR_TOP_LEVEL_REGISTRY)))
ABORT(r);
}