From 2f53ba5ae000a29fe5918f5d36e8efe86a0e5545 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 15 Oct 2022 15:34:25 -0500 Subject: [PATCH] semver: more restrictive semver parser for things like 1.2.3.4 --- extra/semver/semver-tests.factor | 8 ++++++++ extra/semver/semver.factor | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/extra/semver/semver-tests.factor b/extra/semver/semver-tests.factor index 0e7effe575..2e72d1d33b 100644 --- a/extra/semver/semver-tests.factor +++ b/extra/semver/semver-tests.factor @@ -152,3 +152,11 @@ CONSTANT: semver-gt-comparisons { { "2.0.0" } [ "1.2.3" semver-inc-major semver>string ] unit-test { "1.2.3-erg.0" } [ "1.2.3" "erg" semver-inc-prerelease-id semver>string ] unit-test + +{ T{ semver f 2 7 2 "pre" "build" } } [ "2.7.2-pre+build" parse-semver ] unit-test +{ T{ semver f 2 7 2 "pre" f } } [ "2.7.2-pre" parse-semver ] unit-test +{ T{ semver f 2 7 2 f "build" } } [ "2.7.2+build" parse-semver ] unit-test + +[ "2.7.2.1+build" parse-semver ] [ malformed-semver? ] must-fail-with +[ "2.7.2.+build" parse-semver ] [ malformed-semver? ] must-fail-with +[ "2.7.2." parse-semver ] [ malformed-semver? ] must-fail-with diff --git a/extra/semver/semver.factor b/extra/semver/semver.factor index 92f3f998dd..1e18e84484 100644 --- a/extra/semver/semver.factor +++ b/extra/semver/semver.factor @@ -26,10 +26,14 @@ TUPLE: semver { prerelease initial: "" } { build initial: "" } ; +ERROR: malformed-semver parts ; +: check-semver-parts ( seq -- seq ) + dup length 3 <= [ malformed-semver ] unless ; + : parse-semver ( str -- semver ) "+" split1 [ "-" split1 ] dip - [ "." split [ string>number ] map first3 ] 2dip + [ "." split [ string>number ] map check-semver-parts first3 ] 2dip semver boa ; : ( str -- semver ) parse-semver ; inline -- 2.34.1