tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mdom/media/webrtc/transport/third_party/nrappkit/src/registry/registry.c | 60+++++++++++++++++++++++++++++++++++++++---------------------
Mdom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_int.h | 64+++++++++++++++++++++++++++++++++++++++++++++++-----------------
Mdom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c | 123++-----------------------------------------------------------------------------
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); }