From: Michael Tremer Date: Sat, 27 Feb 2021 11:50:13 +0000 (+0000) Subject: parser: Allow empty lines after T_KEY to open a block X-Git-Tag: 0.9.28~1285^2~683 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36446af03b6b55b8ecd55ea4cc9311ea1f0326a5;p=pakfire.git parser: Allow empty lines after T_KEY to open a block Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 39ff27bef..25d811d7b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -653,7 +653,8 @@ EXTRA_DIST += \ tests/data/parser/test-comments.txt \ tests/data/parser/test-conditionals.txt \ tests/data/parser/test-declarations.txt \ - tests/data/parser/test-subparsers.txt + tests/data/parser/test-subparsers.txt \ + tests/data/parser/perl.info .PHONY: clean-local-check clean-local-check: diff --git a/src/libpakfire/parser/grammar.y b/src/libpakfire/parser/grammar.y index 45d76b7d2..dd8154737 100644 --- a/src/libpakfire/parser/grammar.y +++ b/src/libpakfire/parser/grammar.y @@ -196,9 +196,9 @@ declaration : key T_ASSIGN value T_EOL if (r) ABORT; } - | key T_EOL T_INDENT lines T_OUTDENT T_END T_EOL + | key T_EOL empty_lines T_INDENT lines T_OUTDENT T_END T_EOL { - int r = pakfire_parser_new_declaration(&$$, $1, $4); + int r = pakfire_parser_new_declaration(&$$, $1, $5); if (r) ABORT; } diff --git a/tests/data/parser/perl.info b/tests/data/parser/perl.info new file mode 100644 index 000000000..ecc771fe8 --- /dev/null +++ b/tests/data/parser/perl.info @@ -0,0 +1,576 @@ +# Pakfire 0.9.27 + +# Package information +package + name = perl + version = 5.20.3 + release = 15.ip3 + epoch = 2 + arch = x86_64 + + uuid = 3ccced8a-3be5-426e-baec-7b5fc113f176 + groups = Development/Languages + maintainer = Michael Tremer + url = http://www.perl.org/ + license = GPL+ or Artistic and GPLv2+ or Artistic + + summary = Practical Extraction and Report Language. + + def description + Perl is a high-level programming language with roots in C, sed, awk and shell + scripting. Perl is good at handling processes and files, and is especially good + at handling text. Perl's hallmarks are practicality and efficiency. While it is + used to do a lot of different things, Perl's most common applications are system + administration utilities and web programming. A large proportion of the CGI + scripts on the web are written in Perl. You need the perl package installed on + your system so that your system can handle Perl scripts. + end + + type = binary + size = 23795469 +end + +# Build information +build + host = cornelius.ipfire.org + id = 9c540fcd-1938-4f17-af02-d85ad63584bb + time = 1479510095 +end + +# Distribution information +distribution + name = IPFire + release = 3 + vendor = IPFire Project + maintainer = +end + +# Dependency information +dependencies + def prerequires + + end + + def requires + /lib64/ld-linux-x86-64.so.2 + libc.so.6()(64bit) + libc.so.6(GLIBC_2.14)(64bit) + libc.so.6(GLIBC_2.2.5)(64bit) + libc.so.6(GLIBC_2.3)(64bit) + libc.so.6(GLIBC_2.3.2)(64bit) + libc.so.6(GLIBC_2.4)(64bit) + libcrypt.so.1()(64bit) + libdl.so.2()(64bit) + libgdbm.so.4()(64bit) + libgdbm_compat.so.4()(64bit) + libm.so.6()(64bit) + libm.so.6(GLIBC_2.2.5)(64bit) + libnsl.so.1()(64bit) + libperl.so()(64bit) + libpthread.so.0()(64bit) + libutil.so.1()(64bit) + perl >= 0:5.000 + perl >= 0:5.001 + perl >= 0:5.002 + perl >= 0:5.003_11 + perl >= 0:5.004 + perl >= 0:5.005 + perl >= 0:5.005_02 + perl >= 0:5.006 + perl >= 0:5.006002 + perl >= 0:5.006_001 + perl >= 0:5.007 + perl >= 0:5.007003 + perl >= 0:5.008 + perl >= 0:5.008001 + perl >= 0:5.009001 + perl >= 0:5.009004 + perl >= 0:5.009005 + perl >= 1:5 + perl >= 1:5.010001 + perl >= 1:5.010_000 + perl(B) + perl(B::Concise) + perl(B::Terse) + perl(Carp) + perl(Class::Struct) + perl(Compress::Raw::Bzip2) >= 2.064 + perl(Compress::Raw::Zlib) >= 2.064 + perl(Config) + perl(Cwd) + perl(DynaLoader) + perl(Encode) + perl(Errno) + perl(Exporter) + perl(ExtUtils::Constant) + perl(ExtUtils::Constant::Base) + perl(ExtUtils::Constant::Utils) + perl(ExtUtils::Constant::XS) + perl(Fcntl) + perl(File::Path) + perl(File::Spec) + perl(File::Spec::Functions) + perl(File::Spec::Unix) + perl(File::Temp) + perl(File::stat) + perl(FileHandle) + perl(Getopt::Long) + perl(Getopt::Std) + perl(I18N::LangTags) + perl(IO) + perl(IO::Compress::Adapter::Bzip2) >= 2.064 + perl(IO::Compress::Adapter::Deflate) >= 2.064 + perl(IO::Compress::Adapter::Identity) >= 2.064 + perl(IO::Compress::Base) >= 2.064 + perl(IO::Compress::Base::Common) >= 2.064 + perl(IO::Compress::Gzip::Constants) >= 2.064 + perl(IO::Compress::RawDeflate) >= 2.064 + perl(IO::Compress::Zip::Constants) >= 2.064 + perl(IO::Compress::Zlib::Constants) >= 2.064 + perl(IO::Compress::Zlib::Extra) >= 2.064 + perl(IO::File) + perl(IO::Handle) + perl(IO::Seekable) + perl(IO::Select) + perl(IO::Socket) + perl(IO::Socket::INET) + perl(IO::Socket::UNIX) + perl(IO::Uncompress::Adapter::Bunzip2) >= 2.064 + perl(IO::Uncompress::Adapter::Identity) >= 2.064 + perl(IO::Uncompress::Adapter::Inflate) >= 2.064 + perl(IO::Uncompress::Base) >= 2.064 + perl(IO::Uncompress::Gunzip) >= 2.064 + perl(IO::Uncompress::Inflate) >= 2.064 + perl(IO::Uncompress::RawInflate) >= 2.064 + perl(IO::Uncompress::Unzip) >= 2.064 + perl(IPC::Open3) + perl(IPC::SysV) + perl(MIME::Base64) + perl(MIME::QuotedPrint) + perl(Math::BigFloat) + perl(Math::BigInt) + perl(Math::BigInt::Calc) >= 1.997 + perl(Math::Complex) >= 1.59 + perl(Net::Cmd) + perl(Net::Config) + perl(Net::FTP::I) + perl(Net::FTP::dataconn) + perl(Opcode) >= 1.01 + perl(POSIX) + perl(Pod::Html) + perl(Pod::Simple::Search) + perl(SDBM_File) + perl(Scalar::Util) >= 1.10 + perl(SelectSaver) + perl(SelfLoader) + perl(Socket) >= 1.3 + perl(Storable) + perl(Symbol) + perl(Text::Tabs) + perl(Text::Wrap) + perl(Tie::Handle) + perl(Tie::Hash) + perl(Tie::StdHandle) + perl(Time::HiRes) + perl(Time::Local) + perl(Time::tm) + perl(Unicode::Collate) + perl(XSLoader) + perl(_charnames) + perl(base) + perl(bigint) + perl(bytes) + perl(charnames) + perl(constant) + perl(feature) + perl(if) + perl(integer) + perl(overload) + perl(parent) + perl(re) + perl(subs) + perl(threads) + perl(threads::shared) + perl(utf8) + perl(warnings) + perl(warnings::register) + perl-libs = 5.20.3-15.ip3 + end + + def provides + + # Compat provides + # File provides + # Largefile provides + # PerlIO provides + # Threading provides + B.so()(64bit) + Base64.so()(64bit) + Collate.so()(64bit) + Cwd.so()(64bit) + DosGlob.so()(64bit) + FastCalc.so()(64bit) + Fcntl.so()(64bit) + FieldHash.so()(64bit) + GDBM_File.so()(64bit) + Glob.so()(64bit) + Hostname.so()(64bit) + IO.so()(64bit) + Langinfo.so()(64bit) + NDBM_File.so()(64bit) + NamedCapture.so()(64bit) + Normalize.so()(64bit) + ODBM_File.so()(64bit) + Opcode.so()(64bit) + POSIX.so()(64bit) + Peek.so()(64bit) + SDBM_File.so()(64bit) + SysV.so()(64bit) + Util.so()(64bit) + arybase.so()(64bit) + attributes.so()(64bit) + encoding.so()(64bit) + mmap.so()(64bit) + mro.so()(64bit) + perl(:MODULE_COMPAT_5.20.0) + perl(:MODULE_COMPAT_5.20.1) + perl(:MODULE_COMPAT_5.20.2) + perl(:MODULE_COMPAT_5.20.3) + perl(:WITH_ITHREADS) + perl(:WITH_LARGEFILES) + perl(:WITH_PERLIO) + perl(:WITH_THREADS) + perl(AnyDBM_File) = 1.01 + perl(Attribute::Handlers) = 0.96 + perl(AutoLoader) = 5.74 + perl(AutoSplit) = 1.06 + perl(B) = 1.48 + perl(B::Concise) = 0.992 + perl(B::Deparse) = 1.26 + perl(B::OBJECT) + perl(B::Section) + perl(B::Showlex) = 1.04 + perl(B::Terse) = 1.06 + perl(B::Xref) = 1.05 + perl(Benchmark) = 1.18 + perl(Class::Struct) = 0.65 + perl(Class::Struct::Tie_ISA) + perl(Config) = 5.020003 + perl(Config::Extensions) = 0.01 + perl(Config::Perl::V) = 0.22 + perl(DB) = 1.07 + perl(DBM_Filter) = 0.06 + perl(DBM_Filter::compress) = 0.03 + perl(DBM_Filter::encode) = 0.03 + perl(DBM_Filter::int32) = 0.03 + perl(DBM_Filter::null) = 0.03 + perl(DBM_Filter::utf8) = 0.03 + perl(Devel::Peek) = 1.16 + perl(Devel::SelfStubber) = 1.05 + perl(DirHandle) = 1.04 + perl(Dumpvalue) = 1.17 + perl(DynaLoader) = 1.25 + perl(EVERY) + perl(EVERY::LAST) + perl(English) = 1.09 + perl(Errno) = 1.20 + perl(ExtUtils::Constant) = 0.23 + perl(ExtUtils::Constant::Base) = 0.05 + perl(ExtUtils::Constant::ProxySubs) = 0.08 + perl(ExtUtils::Constant::Utils) = 0.03 + perl(ExtUtils::Constant::XS) = 0.03 + perl(ExtUtils::Mksymlists) = 6.98 + perl(Fcntl) = 1.11 + perl(File::Basename) + perl(File::Basename) = 2.85 + perl(File::Compare) = 1.1006 + perl(File::Copy) = 2.30 + perl(File::DosGlob) = 1.12 + perl(File::Find) = 1.27 + perl(File::Glob) = 1.23 + perl(File::stat) = 1.07 + perl(FileCache) = 1.09 + perl(FileHandle) = 2.02 + perl(FindBin) = 1.51 + perl(GDBM_File) = 1.15 + perl(Getopt::Std) = 1.10 + perl(Hash::Util) = 0.16 + perl(Hash::Util::FieldHash) = 1.15 + perl(I18N::Collate) = 1.02 + perl(I18N::LangTags) = 0.40 + perl(I18N::LangTags::Detect) = 1.05 + perl(I18N::LangTags::List) = 0.39 + perl(I18N::Langinfo) = 0.11 + perl(IO) = 1.31 + perl(IO::Compress::Adapter::Bzip2) = 2.064 + perl(IO::Compress::Adapter::Deflate) = 2.064 + perl(IO::Compress::Adapter::Identity) = 2.064 + perl(IO::Compress::Bzip2) = 2.064 + perl(IO::Compress::Deflate) = 2.064 + perl(IO::Compress::Gzip) = 2.064 + perl(IO::Compress::Gzip::Constants) = 2.064 + perl(IO::Compress::RawDeflate) = 2.064 + perl(IO::Compress::Zip) = 2.064 + perl(IO::Compress::Zip::Constants) = 2.064 + perl(IO::Compress::Zlib::Constants) = 2.064 + perl(IO::Compress::Zlib::Extra) = 2.064 + perl(IO::Dir) = 1.10 + perl(IO::File) = 1.16 + perl(IO::Handle) = 1.35 + perl(IO::Pipe) = 1.15 + perl(IO::Pipe::End) + perl(IO::Poll) = 0.09 + perl(IO::Seekable) = 1.10 + perl(IO::Select) = 1.22 + perl(IO::Socket) = 1.38 + perl(IO::Socket::INET) = 1.35 + perl(IO::Socket::UNIX) = 1.26 + perl(IO::Uncompress::Adapter::Bunzip2) = 2.064 + perl(IO::Uncompress::Adapter::Identity) = 2.064 + perl(IO::Uncompress::Adapter::Inflate) = 2.064 + perl(IO::Uncompress::AnyInflate) = 2.064 + perl(IO::Uncompress::Bunzip2) = 2.064 + perl(IO::Uncompress::Gunzip) = 2.064 + perl(IO::Uncompress::Inflate) = 2.064 + perl(IO::Uncompress::RawInflate) = 2.064 + perl(IO::Uncompress::Unzip) = 2.064 + perl(IPC::Msg) = 2.04 + perl(IPC::Msg::stat) + perl(IPC::Open2) = 1.04 + perl(IPC::Open3) = 1.16 + perl(IPC::Semaphore) = 2.04 + perl(IPC::Semaphore::stat) + perl(IPC::SharedMem) = 2.04 + perl(IPC::SharedMem::stat) + perl(IPC::SysV) = 2.04 + perl(MIME::Base64) = 3.14 + perl(MIME::QuotedPrint) = 3.13 + perl(Math::BigFloat) = 1.9991 + perl(Math::BigFloat::Trace) = 0.36 + perl(Math::BigInt) = 1.9993 + perl(Math::BigInt::Calc) = 1.998 + perl(Math::BigInt::CalcEmu) = 1.9991 + perl(Math::BigInt::FastCalc) = 0.31 + perl(Math::BigInt::Trace) = 0.36 + perl(Math::BigRat) = 0.2606 + perl(Math::Complex) = 1.59 + perl(Math::Trig) = 1.23 + perl(Memoize) = 1.03 + perl(Memoize::AnyDBM_File) = 1.03 + perl(Memoize::Expire) = 1.03 + perl(Memoize::ExpireFile) = 1.03 + perl(Memoize::ExpireTest) = 1.03 + perl(Memoize::NDBM_File) = 1.03 + perl(Memoize::SDBM_File) = 1.03 + perl(Memoize::Storable) = 1.03 + perl(NDBM_File) = 1.12 + perl(NEXT) = 0.65 + perl(NEXT::ACTUAL) + perl(NEXT::ACTUAL::DISTINCT) + perl(NEXT::ACTUAL::UNSEEN) + perl(NEXT::DISTINCT) + perl(NEXT::DISTINCT::ACTUAL) + perl(NEXT::UNSEEN) + perl(NEXT::UNSEEN::ACTUAL) + perl(Net::Cmd) = 2.30 + perl(Net::Config) = 1.13 + perl(Net::Domain) = 2.23 + perl(Net::FTP) = 2.79 + perl(Net::FTP::A) = 1.19 + perl(Net::FTP::E) = 0.01 + perl(Net::FTP::I) = 1.12 + perl(Net::FTP::L) = 0.01 + perl(Net::FTP::dataconn) = 0.12 + perl(Net::NNTP) = 2.26 + perl(Net::Netrc) = 2.14 + perl(Net::POP3) = 2.31 + perl(Net::Ping) = 2.43 + perl(Net::SMTP) = 2.33 + perl(Net::Time) = 2.10 + perl(Net::hostent) = 1.01 + perl(Net::netent) = 1.00 + perl(Net::protoent) = 1.00 + perl(Net::servent) = 1.01 + perl(O) = 1.01 + perl(ODBM_File) = 1.12 + perl(Opcode) = 1.27 + perl(POSIX) = 1.38 + perl(POSIX::SigAction) + perl(POSIX::SigRt) + perl(POSIX::SigSet) + perl(PerlIO) = 1.09 + perl(PerlIO::encoding) = 0.18 + perl(PerlIO::mmap) = 0.011 + perl(PerlIO::scalar) = 0.18 + perl(PerlIO::via) = 0.15 + perl(PerlIO::via::QuotedPrint) = 0.07 + perl(Pod::Functions) = 1.08 + perl(Pod::Html) = 1.21 + perl(Pod::Simple::XHTML::LocalPodLinks) + perl(SDBM_File) = 1.11 + perl(Safe) = 2.37 + perl(Search::Dict) = 1.07 + perl(SelectSaver) = 1.02 + perl(SelfLoader) = 1.21 + perl(Symbol) = 1.07 + perl(Sys::Hostname) = 1.18 + perl(Term::Cap) = 1.15 + perl(Term::Complete) = 1.402 + perl(Term::ReadLine) = 1.14 + perl(Term::ReadLine::Stub) + perl(Term::ReadLine::TermCap) + perl(Term::ReadLine::Tk) + perl(Test) = 1.26 + perl(Text::Abbrev) = 1.02 + perl(Text::Balanced) = 2.02 + perl(Text::Balanced::ErrorMsg) + perl(Text::Balanced::Extractor) + perl(Text::Tabs) = 2013.0523 + perl(Text::Wrap) = 2013.0523 + perl(Thread) = 3.04 + perl(Thread::Semaphore) = 2.12 + perl(Tie::Array) = 1.06 + perl(Tie::ExtraHash) + perl(Tie::File) = 1.00 + perl(Tie::File::Cache) + perl(Tie::File::Heap) + perl(Tie::Handle) = 4.2 + perl(Tie::Hash) = 1.05 + perl(Tie::Hash::NamedCapture) = 0.09 + perl(Tie::Memoize) = 1.1 + perl(Tie::RefHash) = 1.39 + perl(Tie::RefHash::Nestable) + perl(Tie::Scalar) = 1.03 + perl(Tie::StdArray) + perl(Tie::StdHandle) = 4.4 + perl(Tie::StdHash) + perl(Tie::StdScalar) + perl(Tie::SubstrHash) = 1.00 + perl(Time::gmtime) = 1.03 + perl(Time::localtime) = 1.02 + perl(Time::tm) = 1.00 + perl(UNIVERSAL) = 1.11 + perl(Unicode::Collate) = 1.04 + perl(Unicode::Collate::CJK::Big5) = 0.65 + perl(Unicode::Collate::CJK::GB2312) = 0.65 + perl(Unicode::Collate::CJK::JISX0208) = 0.64 + perl(Unicode::Collate::CJK::Korean) = 1.02 + perl(Unicode::Collate::CJK::Pinyin) = 0.85 + perl(Unicode::Collate::CJK::Stroke) = 0.94 + perl(Unicode::Collate::CJK::Zhuyin) = 0.94 + perl(Unicode::Collate::Locale) = 1.02 + perl(Unicode::Normalize) = 1.17 + perl(Unicode::UCD) = 0.58 + perl(User::grent) = 1.01 + perl(User::pwent) = 1.00 + perl(XSLoader) = 0.17 + perl(_charnames) = 1.39 + perl(abbrev.pl) + perl(arybase) = 0.07 + perl(assert.pl) + perl(attributes) = 0.23 + perl(autouse) = 1.08 + perl(base) = 2.22 + perl(bigfloat.pl) + perl(bigint) = 0.36 + perl(bigint.pl) + perl(bignum) = 0.37 + perl(bigrat) = 0.36 + perl(bigrat.pl) + perl(blib) = 1.06 + perl(bytes) = 1.04 + perl(bytes_heavy.pl) + perl(cacheout.pl) + perl(charnames) = 1.40 + perl(complete.pl) + perl(ctime.pl) + perl(deprecate) = 0.03 + perl(diagnostics) = 1.34 + perl(dotsh.pl) + perl(dumpvar.pl) + perl(encoding) = 2.12 + perl(encoding::warnings) = 0.11 + perl(exceptions.pl) + perl(fastcwd.pl) + perl(feature) = 1.36 + perl(fields) = 2.17 + perl(filetest) = 1.03 + perl(find.pl) + perl(finddepth.pl) + perl(flush.pl) + perl(ftp.pl) + perl(getcwd.pl) + perl(getopt.pl) + perl(getopts.pl) + perl(hostname.pl) + perl(if) = 0.0603 + perl(importenv.pl) + perl(integer) = 1.01 + perl(less) = 0.03 + perl(lib) = 0.63 + perl(locale) = 1.03 + perl(mro) = 1.16 + perl(newgetopt.pl) + perl(open) = 1.10 + perl(open2.pl) + perl(open3.pl) + perl(ops) = 1.02 + perl(overload) = 1.22 + perl(overload::numbers) + perl(overloading) = 0.02 + perl(perl5db.pl) + perl(perlfaq) = 5.0150044 + perl(pwd.pl) + perl(re) = 0.26 + perl(shellwords.pl) + perl(sigtrap) = 1.07 + perl(sort) = 2.02 + perl(stat.pl) + perl(strict) + perl(strict) = 1.08 + perl(subs) = 1.02 + perl(syslog.pl) + perl(tainted.pl) + perl(termcap.pl) + perl(timelocal.pl) + perl(utf8) = 1.13 + perl(utf8_heavy.pl) + perl(validate.pl) + perl(vars) + perl(vars) = 1.03 + perl(vmsish) = 1.04 + perl(warnings) = 1.23 + perl(warnings::register) = 1.03 + perllook.pl) + re.so()(64bit) + scalar.so()(64bit) + via.so()(64bit) + uuid(3ccced8a-3be5-426e-baec-7b5fc113f176) + end + + def conflicts + + end + + def obsoletes + perl-Archive-Extract + perl-CPANPLUS + perl-Class-ISA + perl-Log-Message + perl-Log-Message-Simple + perl-Module-Plugable + perl-Object-Accessor + perl-Term-UI + perl-Version-Requirements + end + + def recommends + + end + + def suggests + + end +end + +# EOF diff --git a/tests/libpakfire/parser.c b/tests/libpakfire/parser.c index db5f88838..4f4f2decc 100644 --- a/tests/libpakfire/parser.c +++ b/tests/libpakfire/parser.c @@ -108,6 +108,9 @@ static const char* files[] = { "data/parser/test-conditionals.txt", "data/parser/test-declarations.txt", "data/parser/test-subparsers.txt", + + // Some real life examples that caused trouble + "data/parser/perl.info", NULL, };