Fixed a xbps_pkgpattern_name() crash and a test to reproduce it (found by Gottox).

This commit is contained in:
Juan RP 2014-02-15 01:26:42 +01:00
parent 596a8c199f
commit 2fa0d56658
3 changed files with 9 additions and 2 deletions

3
NEWS
View File

@ -1,5 +1,8 @@
xbps-0.32 (???): xbps-0.32 (???):
* Fixed a bug in xbps_pkgpattern_name() where a string with some special
chars would result in a crash (reported by Gottox).
* Do the package removal in two phases: the first phase checks the * Do the package removal in two phases: the first phase checks the
user has write permission to the entries being removed, if this user has write permission to the entries being removed, if this
succeeds then the package removal is performed. succeeds then the package removal is performed.

View File

@ -1,5 +1,5 @@
/*- /*-
* Copyright (c) 2008-2013 Juan Romero Pardines. * Copyright (c) 2008-2014 Juan Romero Pardines.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -169,6 +169,9 @@ xbps_pkgpattern_name(const char *pkg)
return NULL; return NULL;
len = strlen(pkg) - strlen(res) + 1; len = strlen(pkg) - strlen(res) + 1;
if (strlen(pkg) < len-2)
return NULL;
if (pkg[len-2] == '-') if (pkg[len-2] == '-')
len--; len--;

View File

@ -1,5 +1,5 @@
/*- /*-
* Copyright (c) 2012-2013 Juan Romero Pardines. * Copyright (c) 2012-2014 Juan Romero Pardines.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -64,6 +64,7 @@ ATF_TC_BODY(util_test, tc)
ATF_REQUIRE_STREQ(xbps_pkgpattern_name("systemd-[0-9]*"), "systemd"); ATF_REQUIRE_STREQ(xbps_pkgpattern_name("systemd-[0-9]*"), "systemd");
ATF_REQUIRE_STREQ(xbps_pkgpattern_name("systemd>4[3-9]?"), "systemd"); ATF_REQUIRE_STREQ(xbps_pkgpattern_name("systemd>4[3-9]?"), "systemd");
ATF_REQUIRE_STREQ(xbps_pkgpattern_name("systemd<4_1?"), "systemd"); ATF_REQUIRE_STREQ(xbps_pkgpattern_name("systemd<4_1?"), "systemd");
ATF_CHECK_EQ(xbps_pkgpattern_name("*nslookup"), NULL);
} }
ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TCS(tp)