From: Doug Coleman Date: Sat, 15 Oct 2022 20:34:25 +0000 (-0500) Subject: semver: more restrictive semver parser for things like 1.2.3.4 X-Git-Tag: 0.99~1053 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=2f53ba5ae000a29fe5918f5d36e8efe86a0e5545 semver: more restrictive semver parser for things like 1.2.3.4 --- 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