From 787fd6f4f4c904510a477641dd21197b6564318c Mon Sep 17 00:00:00 2001 From: Rafael Garcia-Suarez Date: Thu, 19 Jan 2006 13:24:14 +0000 Subject: In spec2srcheader(): extend stack; fudge with errno. --- URPM.xs | 8 +++++--- t/parse.t | 8 +++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/URPM.xs b/URPM.xs index 23a1950..0391ec2 100644 --- a/URPM.xs +++ b/URPM.xs @@ -3666,13 +3666,15 @@ Urpm_spec2srcheader(specfile) pkg = (URPM__Package)malloc(sizeof(struct s_Package)); memset(pkg, 0, sizeof(struct s_Package)); pkg->h = headerLink(spec->sourceHeader); - EXTEND(SP, 1); sv_pkg = sv_newmortal(); sv_setref_pv(sv_pkg, "URPM::Package", (void*)pkg); - PUSHs(sv_pkg); + XPUSHs(sv_pkg); spec = freeSpec(spec); } else { - PUSHs(&PL_sv_undef); + XPUSHs(&PL_sv_undef); + /* apparently rpmlib sets errno this when given a bad spec. */ + if (errno == EBADF) + errno = 0; } ts = rpmtsFree(ts); diff --git a/t/parse.t b/t/parse.t index d27c15f..29a6386 100644 --- a/t/parse.t +++ b/t/parse.t @@ -4,7 +4,7 @@ use strict; use warnings; -use Test::More tests => 27; +use Test::More tests => 28; use MDV::Packdrakeng; use URPM; use URPM::Build; @@ -72,4 +72,10 @@ ok(URPM::rpmvercmp("1:1-1mdk", "2:1-1mdk") == -1, "epoch 1 vs 2 = -1"); ok($pkg->get_tag(1000) eq 'test-rpm', 'parsed correctly'); $pkg = URPM::spec2srcheader("doesnotexist.spec"); ok(!defined $pkg, "non-existent spec"); + open my $f, '>', 'bad.spec' or die "Can't write bad.spec: $!\n"; + print $f "Name: foo\nVerssion: 2\n"; + close $f; + $pkg = URPM::spec2srcheader("bad.spec"); + ok(!defined $pkg, "bad spec"); + END { unlink "bad.spec" } } -- cgit v1.2.1