diff --git a/DEPS b/DEPS
index e2d546a..84c331d 100644
--- a/DEPS
+++ b/DEPS
@@ -75,6 +75,9 @@
   "gperftools_revision": "180bfa10d7cb38e8b3784d60943d50e8fcef0dcb",
 
   # Revisions of /third_party/* dependencies.
+  # Note that putting an EOL comment after a dependency below will prevent the
+  # 'tools/rev_sdk_deps.dart' tool from attempting to rev to a newer revision.
+
   "args_rev": "73e8d3b55cbedc9765f8e266f3422d8914f8e62a",
   "async_rev": "f3ed5f690e2ec9dbe1bfc5184705575b4f6480e5",
   "bazel_worker_rev": "9710de6c9c70b1b583183db9d9721ba64e5a16fe",
@@ -103,11 +106,11 @@
   #   and land the review.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164.
-  "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea",
+  "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea", # manually rev'd
 
   "dartdoc_rev": "58348a98b992ce99b95d23131b67227bdb2b4875",
   "devtools_rev": "51ac983d2db7eb19b3ce5956cb70b769d74fe784",
-  "ffi_rev": "0c8364a728cfe4e4ba859c53b99d56b3dbe3add4", # dart-lang/ffi/issues/148
+  "ffi_rev": "18b2b549d55009ff594600b04705ff6161681e07",
   "file_rev": "0132eeedea2933513bf230513a766a8baeab0c4f",
   "fixnum_rev": "164712f6547cdfb2709b752188186baf31fd1730",
   "glob_rev": "e10eb2407c58427144004458ef85c9bbf7286e56",
@@ -119,7 +122,7 @@
   "intl_rev": "e9b573679de5e703d89a242b9dca331c772979ef",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "2de9a1f9821807fa2c85fd48e2f70b9cbcddcb67",
-  "linter_rev": "1ddc70948d94f2449fec69a95e3ceb7b6b6c8348", # 1.25.0
+  "linter_rev": "1ddc70948d94f2449fec69a95e3ceb7b6b6c8348", # manually rev'd
   "lints_rev": "8294e5648ab49474541527e2911e72e4c5aefe55",
   "logging_rev": "f6979e3bc3b6e1847a08335b7eb6304e18986195",
   "markdown_rev": "e3f4bd28c9e61b522f75f291d4d6cfcfeccd83ee", # b/236358256
@@ -133,7 +136,7 @@
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_rev": "c40cc32eabecb9d60f1045d1403108d968805f9a",
   "protobuf_rev": "3149f6f2d323e11dbcc983b7ac8b3b9e9d686293",
-  "pub_rev": "9bf4289d6fd5d6872a8929d6312bbd7098f3ea9c",
+  "pub_rev": "9bf4289d6fd5d6872a8929d6312bbd7098f3ea9c", # manually rev'd
   "pub_semver_rev": "5c0b4bfd5ca57fe16f1319c581dc8c882e9b8cb2",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
   "rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
diff --git a/tests/ffi/data_not_asan_test.dart b/tests/ffi/data_not_asan_test.dart
index b791d71..8ed4bf6 100644
--- a/tests/ffi/data_not_asan_test.dart
+++ b/tests/ffi/data_not_asan_test.dart
@@ -20,11 +20,11 @@
 void testPointerAllocateTooLarge() {
   // Try to allocate something that doesn't fit in 64 bit address space.
   int maxInt = 9223372036854775807; // 2^63 - 1
-  Expect.throws(() => calloc<Int64>(maxInt));
+  Expect.throws(() => calloc<Int8>(maxInt));
 
   // Try to allocate almost the full 64 bit address space.
   int maxInt1_8 = 1152921504606846975; // 2^60 -1
-  Expect.throws(() => calloc<Int64>(maxInt1_8));
+  Expect.throws(() => calloc<Int8>(maxInt1_8));
 }
 
 void testPointerAllocateNegative() {
diff --git a/tests/ffi_2/data_not_asan_test.dart b/tests/ffi_2/data_not_asan_test.dart
index 8ac3eba..f69d126 100644
--- a/tests/ffi_2/data_not_asan_test.dart
+++ b/tests/ffi_2/data_not_asan_test.dart
@@ -22,11 +22,11 @@
 void testPointerAllocateTooLarge() {
   // Try to allocate something that doesn't fit in 64 bit address space.
   int maxInt = 9223372036854775807; // 2^63 - 1
-  Expect.throws(() => calloc<Int64>(maxInt));
+  Expect.throws(() => calloc<Int8>(maxInt));
 
   // Try to allocate almost the full 64 bit address space.
   int maxInt1_8 = 1152921504606846975; // 2^60 -1
-  Expect.throws(() => calloc<Int64>(maxInt1_8));
+  Expect.throws(() => calloc<Int8>(maxInt1_8));
 }
 
 void testPointerAllocateNegative() {
diff --git a/tools/VERSION b/tools/VERSION
index 4b92fd0..90241e9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 208
+PRERELEASE 209
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/rev_sdk_deps.dart b/tools/rev_sdk_deps.dart
index 6897ae2..47a0582 100644
--- a/tools/rev_sdk_deps.dart
+++ b/tools/rev_sdk_deps.dart
@@ -3,15 +3,6 @@
 
 import 'package:path/path.dart' as path;
 
-// These packages are effectively pinned - they often require manual work when
-// rolling.
-// TODO(devoncarew): Keep this metadata in the DEPS file.
-const Set<String> pinned = {
-  'dart_style',
-  'linter',
-  'pub',
-};
-
 void main(List<String> args) async {
   // Validate we're running from the repo root.
   if (!File('README.dart-sdk').existsSync() || !File('DEPS').existsSync()) {
@@ -22,7 +13,14 @@
   final gclient = GClientHelper();
 
   final deps = await gclient.getPackageDependencies();
-  print('${deps.length} non-pinned package dependencies found.');
+  print('${deps.length} package dependencies found.');
+
+  // Remove pinned deps.
+  final pinnedDeps = calculatePinnedDeps();
+  deps.removeWhere((dep) => pinnedDeps.contains(dep.name));
+
+  print('Not attempting to move forward the revisions for: '
+      '${pinnedDeps.toList().join(', ')}.');
   print('');
 
   deps.sort((a, b) => a.name.compareTo(b.name));
@@ -51,6 +49,19 @@
   }
 }
 
+// By convention, pinned deps are deps with an eol comment.
+Set<String> calculatePinnedDeps() {
+  final packageRevision = RegExp(r'"(\w+)_rev":');
+
+  // "markdown_rev": "e3f4bd28c9...cfeccd83ee", # b/236358256
+  var depsFile = File('DEPS');
+  return depsFile
+      .readAsLinesSync()
+      .where((line) => packageRevision.hasMatch(line) && line.contains('", #'))
+      .map((line) => packageRevision.firstMatch(line)!.group(1)!)
+      .toSet();
+}
+
 class GitHelper {
   final String dir;
 
@@ -115,8 +126,6 @@
       );
     }).where((PackageDependency deps) {
       return deps.entry.startsWith('sdk/third_party/pkg/');
-    }).where((PackageDependency deps) {
-      return !pinned.contains(deps.name);
     }).toList();
   }
 
