From 942a980dac888246cd6585755e07222fb5d82462 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:21:36 +0100 Subject: [PATCH 1/6] Rust: Update PoemHandlerParam from getResolvedPath -> getCanonicalPath. --- rust/ql/lib/codeql/rust/frameworks/Poem.qll | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/Poem.qll b/rust/ql/lib/codeql/rust/frameworks/Poem.qll index 66c01a415a1c..dbc510b63d83 100644 --- a/rust/ql/lib/codeql/rust/frameworks/Poem.qll +++ b/rust/ql/lib/codeql/rust/frameworks/Poem.qll @@ -5,16 +5,19 @@ private import rust private import codeql.rust.Concepts private import codeql.rust.dataflow.DataFlow +private import codeql.rust.internal.TypeInference +private import codeql.rust.internal.Type /** * Parameters of a handler function */ private class PoemHandlerParam extends RemoteSource::Range { PoemHandlerParam() { - exists(TupleStructPat param | - param.getResolvedPath() = ["crate::web::query::Query", "crate::web::path::Path"] - | - this.asPat().getPat() = param.getAField() + exists(TupleStructPat param, Type t | + this.asPat().getPat() = param.getAField() and + t = inferType(param) and + t.(StructType).asItemNode().(Addressable).getCanonicalPath() = + ["poem::web::query::Query", "poem::web::path::Path"] ) } } From 9c3e362594b5bcbe2ba88ec6b02204ab8f4bf6b9 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Jun 2025 09:28:29 +0100 Subject: [PATCH 2/6] Rust: Add TupleStructPat.getStruct. --- .../lib/codeql/rust/elements/internal/TupleStructPatImpl.qll | 5 +++++ rust/ql/lib/codeql/rust/frameworks/Poem.qll | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll index d7d4f02f81e4..38259efadb74 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll @@ -34,6 +34,11 @@ module Impl { exists(this.getField(pragma[only_bind_into](pos))) } + /** + * Gets the struct matched by this pattern. + */ + Struct getStruct() { result = PathResolution::resolvePath(this.getPath()) } + /** Gets the tuple field that matches the `pos`th pattern of this pattern. */ pragma[nomagic] TupleField getTupleField(int pos) { diff --git a/rust/ql/lib/codeql/rust/frameworks/Poem.qll b/rust/ql/lib/codeql/rust/frameworks/Poem.qll index dbc510b63d83..70b2aeb88e6f 100644 --- a/rust/ql/lib/codeql/rust/frameworks/Poem.qll +++ b/rust/ql/lib/codeql/rust/frameworks/Poem.qll @@ -16,8 +16,7 @@ private class PoemHandlerParam extends RemoteSource::Range { exists(TupleStructPat param, Type t | this.asPat().getPat() = param.getAField() and t = inferType(param) and - t.(StructType).asItemNode().(Addressable).getCanonicalPath() = - ["poem::web::query::Query", "poem::web::path::Path"] + param.getStruct().getCanonicalPath() = ["poem::web::query::Query", "poem::web::path::Path"] ) } } From 01c6966cef68d15112a324689e63da01e4c39267 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:22:51 +0100 Subject: [PATCH 3/6] Rust: Remove redundant code and imports. --- rust/ql/lib/codeql/rust/frameworks/Poem.qll | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/Poem.qll b/rust/ql/lib/codeql/rust/frameworks/Poem.qll index 70b2aeb88e6f..2554d8452939 100644 --- a/rust/ql/lib/codeql/rust/frameworks/Poem.qll +++ b/rust/ql/lib/codeql/rust/frameworks/Poem.qll @@ -4,18 +4,14 @@ private import rust private import codeql.rust.Concepts -private import codeql.rust.dataflow.DataFlow -private import codeql.rust.internal.TypeInference -private import codeql.rust.internal.Type /** * Parameters of a handler function */ private class PoemHandlerParam extends RemoteSource::Range { PoemHandlerParam() { - exists(TupleStructPat param, Type t | + exists(TupleStructPat param | this.asPat().getPat() = param.getAField() and - t = inferType(param) and param.getStruct().getCanonicalPath() = ["poem::web::query::Query", "poem::web::path::Path"] ) } From 117a80e8d780ce46b23c793484fd44e26307da98 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Jun 2025 17:19:55 +0100 Subject: [PATCH 4/6] Rust: Accept consistency check changes. --- .../PathResolutionConsistency.expected | 43 +++++++++++++------ .../PathResolutionConsistency.expected | 6 +-- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected index 767f33660084..05600781a298 100644 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected @@ -1,30 +1,45 @@ +multipleMethodCallTargets +| main.rs:187:13:187:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | +| main.rs:187:13:187:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | +| main.rs:188:13:188:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | +| main.rs:188:13:188:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | +| main.rs:195:13:195:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | +| main.rs:195:13:195:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | +| main.rs:196:13:196:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | +| main.rs:196:13:196:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | +| main.rs:208:21:208:55 | ...::System.grow(...) | file://:0:0:0:0 | fn grow | +| main.rs:208:21:208:55 | ...::System.grow(...) | file://:0:0:0:0 | fn grow | +| main.rs:210:21:210:62 | ...::System.grow_zeroed(...) | file://:0:0:0:0 | fn grow_zeroed | +| main.rs:210:21:210:62 | ...::System.grow_zeroed(...) | file://:0:0:0:0 | fn grow_zeroed | +| main.rs:213:17:213:53 | ...::System.shrink(...) | file://:0:0:0:0 | fn shrink | +| main.rs:213:17:213:53 | ...::System.shrink(...) | file://:0:0:0:0 | fn shrink | multiplePathResolutions -| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | -| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | -| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | -| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | -| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | -| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | -| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc | | main.rs:229:13:229:37 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index d326b510db4c..24cad8382822 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -1,14 +1,14 @@ multiplePathResolutions | deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | deallocation.rs:106:16:106:27 | ...::malloc | file://:0:0:0:0 | fn malloc | | deallocation.rs:106:16:106:27 | ...::malloc | file://:0:0:0:0 | fn malloc | | deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | | deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | From 4b7c7c1c21a7bc5d2061075a791d6156894b83eb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 19 Jun 2025 10:22:30 +0100 Subject: [PATCH 5/6] Rust: Accept consistency check changes (again). --- .../CONSISTENCY/PathResolutionConsistency.expected | 14 +++++++------- .../CONSISTENCY/PathResolutionConsistency.expected | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected index 05600781a298..739520afcbd9 100644 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected @@ -15,31 +15,31 @@ multipleMethodCallTargets | main.rs:213:17:213:53 | ...::System.shrink(...) | file://:0:0:0:0 | fn shrink | multiplePathResolutions | main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc | | main.rs:229:13:229:37 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index 24cad8382822..d326b510db4c 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -1,14 +1,14 @@ multiplePathResolutions | deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | deallocation.rs:106:16:106:27 | ...::malloc | file://:0:0:0:0 | fn malloc | | deallocation.rs:106:16:106:27 | ...::malloc | file://:0:0:0:0 | fn malloc | | deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | | deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | -| deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | +| deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | From b40bd75e64244c1da492e6e9e2ebb995929bebe3 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 19 Jun 2025 14:33:30 +0100 Subject: [PATCH 6/6] Rust: Revert consistency check failures (cross fingers...) --- .../PathResolutionConsistency.expected | 29 +++++-------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected index 739520afcbd9..767f33660084 100644 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected @@ -1,44 +1,29 @@ -multipleMethodCallTargets -| main.rs:187:13:187:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | -| main.rs:187:13:187:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | -| main.rs:188:13:188:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | -| main.rs:188:13:188:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | -| main.rs:195:13:195:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | -| main.rs:195:13:195:43 | ...::System.allocate(...) | file://:0:0:0:0 | fn allocate | -| main.rs:196:13:196:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | -| main.rs:196:13:196:50 | ...::System.allocate_zeroed(...) | file://:0:0:0:0 | fn allocate_zeroed | -| main.rs:208:21:208:55 | ...::System.grow(...) | file://:0:0:0:0 | fn grow | -| main.rs:208:21:208:55 | ...::System.grow(...) | file://:0:0:0:0 | fn grow | -| main.rs:210:21:210:62 | ...::System.grow_zeroed(...) | file://:0:0:0:0 | fn grow_zeroed | -| main.rs:210:21:210:62 | ...::System.grow_zeroed(...) | file://:0:0:0:0 | fn grow_zeroed | -| main.rs:213:17:213:53 | ...::System.shrink(...) | file://:0:0:0:0 | fn shrink | -| main.rs:213:17:213:53 | ...::System.shrink(...) | file://:0:0:0:0 | fn shrink | multiplePathResolutions -| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | -| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | -| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | -| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | -| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | -| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | -| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc |