frida 16.3.1 → 16.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/device.js CHANGED
@@ -97,11 +97,8 @@ class Device {
97
97
  return this.impl.spawn(program, argv, envp, env, cwd, stdio, aux, cancellable);
98
98
  function consumeOption(name) {
99
99
  const value = pendingOptions[name];
100
- if (value === undefined) {
101
- return null;
102
- }
103
100
  delete pendingOptions[name];
104
- return value;
101
+ return value !== null && value !== void 0 ? value : null;
105
102
  }
106
103
  }
107
104
  async input(target, data, cancellable) {
@@ -15,6 +15,10 @@ export interface SystemParameters {
15
15
  * Human-readable version string, e.g. `"11.2.2"`.
16
16
  */
17
17
  version?: string;
18
+ /**
19
+ * Build version, e.g. `"21B91"`.
20
+ */
21
+ build?: string;
18
22
  };
19
23
  /**
20
24
  * Platform, same as `Process.platform` in GumJS.
@@ -24,6 +28,23 @@ export interface SystemParameters {
24
28
  * Architecture, same as `Process.arch` in GumJS.
25
29
  */
26
30
  arch: "ia32" | "x64" | "arm" | "arm64" | "mips";
31
+ /**
32
+ * Hardware details.
33
+ */
34
+ hardware?: {
35
+ /**
36
+ * Product type, e.g. `"iPad6,3"`.
37
+ */
38
+ product?: string;
39
+ /**
40
+ * Hardware platform, e.g. `"t8010"`.
41
+ */
42
+ platform?: string;
43
+ /**
44
+ * Hardware model, e.g. `"J71bAP"`.
45
+ */
46
+ model?: string;
47
+ };
27
48
  /**
28
49
  * Level of access.
29
50
  */
package/lib/device.ts CHANGED
@@ -141,11 +141,8 @@ export class Device {
141
141
 
142
142
  function consumeOption(name) {
143
143
  const value = pendingOptions[name];
144
- if (value === undefined) {
145
- return null;
146
- }
147
144
  delete pendingOptions[name];
148
- return value;
145
+ return value ?? null;
149
146
  }
150
147
  }
151
148
 
@@ -17,6 +17,11 @@ export interface SystemParameters {
17
17
  * Human-readable version string, e.g. `"11.2.2"`.
18
18
  */
19
19
  version?: string;
20
+
21
+ /**
22
+ * Build version, e.g. `"21B91"`.
23
+ */
24
+ build?: string;
20
25
  }
21
26
 
22
27
  /**
@@ -29,6 +34,26 @@ export interface SystemParameters {
29
34
  */
30
35
  arch: "ia32" | "x64" | "arm" | "arm64" | "mips";
31
36
 
37
+ /**
38
+ * Hardware details.
39
+ */
40
+ hardware?: {
41
+ /**
42
+ * Product type, e.g. `"iPad6,3"`.
43
+ */
44
+ product?: string;
45
+
46
+ /**
47
+ * Hardware platform, e.g. `"t8010"`.
48
+ */
49
+ platform?: string;
50
+
51
+ /**
52
+ * Hardware model, e.g. `"J71bAP"`.
53
+ */
54
+ model?: string;
55
+ }
56
+
32
57
  /**
33
58
  * Level of access.
34
59
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frida",
3
- "version": "16.3.1",
3
+ "version": "16.4.0",
4
4
  "authors": [
5
5
  "Frida Developers"
6
6
  ],
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "homepage": "https://frida.re",
23
23
  "engines": {
24
- "node": ">=8.0.0"
24
+ "node": ">=16 || 14 >=14.17"
25
25
  },
26
26
  "main": "./dist",
27
27
  "files": [
package/releng/deps.py CHANGED
@@ -497,7 +497,7 @@ class Builder:
497
497
 
498
498
  if sourcedir.exists():
499
499
  self._print_status(pkg.name, "Reusing existing checkout")
500
- current_rev = git("rev-parse", "FETCH_HEAD", check=True).stdout.strip()
500
+ current_rev = git("rev-parse", "FETCH_HEAD", cwd=sourcedir, check=True).stdout.strip()
501
501
  if current_rev != pkg.version:
502
502
  self._print_status(pkg.name, "WARNING: Checkout does not match version in deps.toml")
503
503
  else:
package/releng/deps.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [dependencies]
2
- version = "20240601"
3
- bootstrap_version = "20240531"
2
+ version = "20240627"
3
+ bootstrap_version = "20240625"
4
4
 
5
5
  [ninja]
6
6
  scope = "toolchain"
@@ -20,7 +20,7 @@ dependencies = [
20
20
  [vala]
21
21
  scope = "toolchain"
22
22
  name = "Vala"
23
- version = "2e32b7d182494094111808103efa5d4a06e6fda8"
23
+ version = "2c7a02d29332dedfdf803ce21b0540bc8461a035"
24
24
  url = "https://github.com/frida/vala.git"
25
25
  dependencies = [
26
26
  "glib",
@@ -158,7 +158,7 @@ url = "https://github.com/frida/sqlite.git"
158
158
  [libunwind]
159
159
  when = "machine.os in {'linux', 'android', 'freebsd', 'qnx'}"
160
160
  name = "libunwind"
161
- version = "ccd3a38597a8397a3382e4e58fdabb26a6f0be13"
161
+ version = "4d0abea0effd3c80916e70abe38c2a6156596f05"
162
162
  url = "https://github.com/frida/libunwind.git"
163
163
  options = [
164
164
  "-Dgeneric_library=disabled",
@@ -207,6 +207,12 @@ dependencies = [
207
207
  "openssl",
208
208
  ]
209
209
 
210
+ [libusb]
211
+ when = "machine.os in {'windows', 'macos', 'linux'}"
212
+ name = "libusb"
213
+ version = "be4d8ec1012f35ff6ce9474ed8d7c3ec4182ac55"
214
+ url = "https://github.com/frida/libusb.git"
215
+
210
216
  [lwip]
211
217
  name = "lwIP"
212
218
  version = "9f64c40cac2e77eddf6b3913961fdd056d307716"
@@ -216,7 +222,7 @@ options = [
216
222
  "-Dipv6=enabled",
217
223
  "-Ddns=disabled",
218
224
  "-Darp=disabled",
219
- "-Dethernet=disabled",
225
+ "-Dethernet=enabled",
220
226
  "-Dtcp_mss=1360",
221
227
  "-Dtcp_snd_buf=65535",
222
228
  "-Dtcp_wnd=65535",
package/src/device.cc CHANGED
@@ -759,11 +759,19 @@ NAN_METHOD(Device::Spawn) {
759
759
  for (uint32_t i = 0; i != n; i++) {
760
760
  auto key = Nan::Get(keys, i).ToLocalChecked();
761
761
  auto value = Nan::Get(object, key).ToLocalChecked();
762
+ if (value->IsUndefined()) {
763
+ continue;
764
+ }
762
765
 
763
- Nan::Utf8String key_str(key);
766
+ Nan::Utf8String k(key);
764
767
 
765
- g_hash_table_insert(aux, g_strdup(*key_str),
766
- g_variant_ref_sink(Runtime::ValueToVariant(value)));
768
+ auto v = Runtime::ValueToVariant(value);
769
+ if (v == NULL) {
770
+ valid = false;
771
+ break;
772
+ }
773
+
774
+ g_hash_table_insert(aux, g_strdup(*k), g_variant_ref_sink(v));
767
775
  }
768
776
  } else {
769
777
  Nan::ThrowTypeError("Bad argument, 'aux' must be an object");
package/src/iostream.cc CHANGED
@@ -5,7 +5,6 @@
5
5
 
6
6
  #define IOSTREAM_DATA_CONSTRUCTOR "iostream:ctor"
7
7
 
8
- using v8::CopyablePersistentTraits;
9
8
  using v8::DEFAULT;
10
9
  using v8::External;
11
10
  using v8::Function;
@@ -185,12 +184,9 @@ class WriteOperation : public Operation<GIOStream> {
185
184
  public:
186
185
  WriteOperation(Isolate* isolate, Local<Value> buffer)
187
186
  : stream_(NULL),
188
- buffer_(isolate, buffer),
189
187
  data_(node::Buffer::Data(buffer)),
190
188
  count_(node::Buffer::Length(buffer)) {
191
- }
192
-
193
- ~WriteOperation() {
189
+ buffer_.Reset(buffer);
194
190
  }
195
191
 
196
192
  protected:
@@ -211,7 +207,7 @@ class WriteOperation : public Operation<GIOStream> {
211
207
 
212
208
  private:
213
209
  GOutputStream* stream_;
214
- Persistent<Value, CopyablePersistentTraits<Value>> buffer_;
210
+ Nan::Persistent<Value, Nan::CopyablePersistentTraits<Value>> buffer_;
215
211
  const void* data_;
216
212
  gsize count_;
217
213
  };
package/src/runtime.cc CHANGED
@@ -16,6 +16,7 @@ using v8::Local;
16
16
  using v8::Number;
17
17
  using v8::Object;
18
18
  using v8::String;
19
+ using v8::Symbol;
19
20
  using v8::Value;
20
21
 
21
22
  namespace frida {
@@ -274,14 +275,39 @@ GVariant* Runtime::ValueToVariant(Local<Value> value) {
274
275
  }
275
276
 
276
277
  if (value->IsArray()) {
278
+ auto array = Local<Array>::Cast(value);
279
+ uint32_t n = array->Length();
280
+ if (n == 2) {
281
+ auto first = Nan::Get(array, 0).ToLocalChecked();
282
+ if (first->IsSymbol()) {
283
+ auto sym = first.As<Symbol>();
284
+ auto desc = sym->Description(
285
+ #if V8_MAJOR_VERSION > 9 || (V8_MAJOR_VERSION == 9 && V8_MINOR_VERSION >= 5)
286
+ Isolate::GetCurrent()
287
+ #endif
288
+ );
289
+ Nan::Utf8String type(desc);
290
+
291
+ auto val = ValueToVariant(Nan::Get(array, 1).ToLocalChecked());
292
+ if (val == NULL) {
293
+ return NULL;
294
+ }
295
+
296
+ GVariant* t[2] = { g_variant_new_string(*type), val };
297
+ return g_variant_new_tuple(t, G_N_ELEMENTS(t));
298
+ }
299
+ }
300
+
277
301
  GVariantBuilder builder;
278
302
  g_variant_builder_init(&builder, G_VARIANT_TYPE ("av"));
279
303
 
280
- auto array = Local<Array>::Cast(value);
281
- uint32_t n = array->Length();
282
304
  for (uint32_t i = 0; i != n; i++) {
283
- auto element_value = Nan::Get(array, i).ToLocalChecked();
284
- g_variant_builder_add(&builder, "v", ValueToVariant(element_value));
305
+ auto v = ValueToVariant(Nan::Get(array, i).ToLocalChecked());
306
+ if (v == NULL) {
307
+ g_variant_builder_clear(&builder);
308
+ return NULL;
309
+ }
310
+ g_variant_builder_add(&builder, "v", v);
285
311
  }
286
312
 
287
313
  return g_variant_builder_end(&builder);
@@ -302,9 +328,19 @@ GVariant* Runtime::ValueToVariant(Local<Value> value) {
302
328
  for (uint32_t i = 0; i != n; i++) {
303
329
  auto key = Nan::Get(names, i).ToLocalChecked();
304
330
  auto val = Nan::Get(object, key).ToLocalChecked();
331
+ if (val->IsUndefined()) {
332
+ continue;
333
+ }
334
+
335
+ Nan::Utf8String k(key);
336
+
337
+ auto v = ValueToVariant(val);
338
+ if (v == NULL) {
339
+ g_variant_builder_clear(&builder);
340
+ return NULL;
341
+ }
305
342
 
306
- Nan::Utf8String key_str(key);
307
- g_variant_builder_add(&builder, "{sv}", *key_str, ValueToVariant(val));
343
+ g_variant_builder_add(&builder, "{sv}", *k, v);
308
344
  }
309
345
 
310
346
  return g_variant_builder_end(&builder);
@@ -1,6 +1,6 @@
1
1
  [wrap-git]
2
2
  url = https://github.com/frida/frida-core.git
3
- revision = 16.3.1
3
+ revision = 16.4.0
4
4
  depth = 1
5
5
 
6
6
  [provide]
@@ -1,6 +1,6 @@
1
1
  [wrap-git]
2
2
  url = https://github.com/nodejs/nan.git
3
- revision = 56585a1cd21f25b4d56168063cedaf0831c63fef
3
+ revision = 4d1d74e0a9ea8fa8091b88e45dc57e4c7eb9cdf7
4
4
  depth = 1
5
5
  diff_files = nan.patch
6
6