libcroco: drop recipe

libcroco has been deprecated and was archived by the gnome-project

https://gitlab.gnome.org/Archive/libcroco

(From OE-Core rev: d53c1aca794ce256b057d63a9a8eaae5bf71fae5)

Signed-off-by: Markus Volk <f_l_k@t-online.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Markus Volk
2023-10-29 17:48:49 +01:00
committed by Richard Purdie
parent 57e3f6ff28
commit 3681db6bb3
5 changed files with 3 additions and 541 deletions

View File

@@ -320,7 +320,6 @@ RECIPE_MAINTAINER:pn-libcgroup = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libcheck = "Yi Zhao <yi.zhao@windriver.com>"
RECIPE_MAINTAINER:pn-libcomps = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libconvert-asn1-perl = "Tim Orling <tim.orling@konsulko.com>"
RECIPE_MAINTAINER:pn-libcroco = "Anuj Mittal <anuj.mittal@intel.com>"
RECIPE_MAINTAINER:pn-libdaemon = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libdazzle = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libdnf = "Alexander Kanavin <alex.kanavin@gmail.com>"

View File

@@ -15,14 +15,9 @@ Signed-off-by: Ross Burton <ross.burton@intel.com>
---
gettext-tools/gnulib-m4/libxml.m4 | 105 +----------------
.../gnulib-local/lib/term-styled-ostream.oo.c | 12 +-
libtextstyle/gnulib-local/m4/libcroco.m4 | 98 +++-------------
libtextstyle/gnulib-local/m4/libglib.m4 | 106 +++---------------
libtextstyle/gnulib-m4/libcroco.m4 | 98 +++-------------
libtextstyle/gnulib-m4/libglib.m4 | 106 +++---------------
libtextstyle/lib/term-styled-ostream.c | 12 +-
libtextstyle/lib/term-styled-ostream.oo.c | 12 +-
8 files changed, 79 insertions(+), 470 deletions(-)
3 files changed, 79 insertions(+), 470 deletions(-)
diff --git a/gettext-tools/gnulib-m4/libxml.m4 b/gettext-tools/gnulib-m4/libxml.m4
index 0340490..0355388 100644
@@ -147,149 +142,6 @@ index 0340490..0355388 100644
fi
])
AC_SUBST([LIBXML])
diff --git a/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c b/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
index 2ff978f..5ffb17a 100644
--- a/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
+++ b/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
@@ -22,15 +22,15 @@
#include <stdlib.h>
-#include <cr-om-parser.h>
-#include <cr-sel-eng.h>
-#include <cr-style.h>
-#include <cr-rgb.h>
+#include <libcroco/cr-om-parser.h>
+#include <libcroco/cr-sel-eng.h>
+#include <libcroco/cr-style.h>
+#include <libcroco/cr-rgb.h>
/* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
#ifndef __CR_FONTS_H__
-# include <cr-fonts.h>
+# include <libcroco/cr-fonts.h>
#endif
-#include <cr-string.h>
+#include <libcroco/cr-string.h>
#include "term-ostream.h"
#include "mem-hash-map.h"
diff --git a/libtextstyle/gnulib-local/m4/libcroco.m4 b/libtextstyle/gnulib-local/m4/libcroco.m4
index 39e72b1..042915a 100644
--- a/libtextstyle/gnulib-local/m4/libcroco.m4
+++ b/libtextstyle/gnulib-local/m4/libcroco.m4
@@ -6,97 +6,29 @@ dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
-dnl gl_LIBCROCO
-dnl gives the user the option to decide whether to use the included or
-dnl an external libcroco.
-dnl gl_LIBCROCO(FORCE-INCLUDED)
-dnl forces the use of the included or an external libcroco.
AC_DEFUN([gl_LIBCROCO],
[
- ifelse([$1], [yes], , [
- dnl libcroco depends on libglib.
- AC_REQUIRE([gl_LIBGLIB])
- ])
+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+ dnl libcroco depends on libglib.
+ AC_REQUIRE([gl_LIBGLIB])
- ifelse([$1], , [
- AC_MSG_CHECKING([whether included libcroco is requested])
- AC_ARG_WITH([included-libcroco],
- [ --with-included-libcroco use the libcroco included here],
- [gl_cv_libcroco_force_included=$withval],
- [gl_cv_libcroco_force_included=no])
- AC_MSG_RESULT([$gl_cv_libcroco_force_included])
- ], [gl_cv_libcroco_force_included=$1])
+ AC_MSG_CHECKING([whether included libcroco is requested])
+ AC_ARG_WITH([included-libcroco],
+ [ --with-included-libcroco use the libcroco included here],
+ [gl_cv_libcroco_force_included=$withval],
+ [gl_cv_libcroco_force_included=no])
+ AC_MSG_RESULT([$gl_cv_libcroco_force_included])
gl_cv_libcroco_use_included="$gl_cv_libcroco_force_included"
LIBCROCO=
LTLIBCROCO=
INCCROCO=
- ifelse([$1], [yes], , [
- if test "$gl_cv_libcroco_use_included" != yes; then
- dnl Figure out whether we can use a preinstalled libcroco-0.6, or have to
- dnl use the included one.
- AC_CACHE_VAL([gl_cv_libcroco], [
- gl_cv_libcroco=no
- gl_cv_LIBCROCO=
- gl_cv_LTLIBCROCO=
- gl_cv_INCCROCO=
- gl_save_LIBS="$LIBS"
- dnl Search for libcroco and define LIBCROCO_0_6, LTLIBCROCO_0_6 and
- dnl INCCROCO_0_6 accordingly.
- dnl Don't use croco-0.6-config nor pkg-config, since it doesn't work when
- dnl cross-compiling or when the C compiler in use is different from the
- dnl one that built the library.
- AC_LIB_LINKFLAGS_BODY([croco-0.6], [glib-2.0])
- LIBS="$gl_save_LIBS $LIBCROCO_0_6"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
- [[const char *version = LIBCROCO_VERSION; return !version;]])],
- [gl_cv_libcroco=yes
- gl_cv_LIBCROCO="$LIBCROCO_0_6"
- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
- ])
- if test "$gl_cv_libcroco" != yes; then
- gl_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCCROCO_0_6"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
- [[const char *version = LIBCROCO_VERSION; return !version;]])],
- [gl_cv_libcroco=yes
- gl_cv_LIBCROCO="$LIBCROCO_0_6"
- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
- gl_cv_INCCROCO="$INCCROCO_0_6"
- ])
- if test "$gl_cv_libcroco" != yes; then
- dnl Often the include files are installed in
- dnl /usr/include/libcroco-0.6/libcroco.
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
- [[const char *version = LIBCROCO_VERSION; return !version;]])],
- [gl_ABSOLUTE_HEADER([libcroco-0.6/libcroco/libcroco-config.h])
- libcroco_include_dir=`echo "$gl_cv_absolute_libcroco_0_6_libcroco_libcroco_config_h" | sed -e 's,.libcroco-config\.h$,,'`
- if test -d "$libcroco_include_dir"; then
- gl_cv_libcroco=yes
- gl_cv_LIBCROCO="$LIBCROCO_0_6"
- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
- gl_cv_INCCROCO="-I$libcroco_include_dir"
- fi
- ])
- fi
- CPPFLAGS="$gl_save_CPPFLAGS"
- fi
- LIBS="$gl_save_LIBS"
- ])
- AC_MSG_CHECKING([for libcroco])
- AC_MSG_RESULT([$gl_cv_libcroco])
- if test $gl_cv_libcroco = yes; then
- LIBCROCO="$gl_cv_LIBCROCO"
- LTLIBCROCO="$gl_cv_LTLIBCROCO"
- INCCROCO="$gl_cv_INCCROCO"
- else
- gl_cv_libcroco_use_included=yes
- fi
- fi
- ])
+ if test "$gl_cv_libcroco_use_included" != yes; then
+ PKG_CHECK_MODULES([CROCO], [libcroco-0.6])
+ LIBCROCO=$CROCO_LIBS
+ LTLIBCROCO=$CROCO_LIBS
+ INCCROCO=$CROCO_CFLAGS
+ fi
AC_SUBST([LIBCROCO])
AC_SUBST([LTLIBCROCO])
AC_SUBST([INCCROCO])
diff --git a/libtextstyle/gnulib-local/m4/libglib.m4 b/libtextstyle/gnulib-local/m4/libglib.m4
index 7ee5029..bb1e5e4 100644
--- a/libtextstyle/gnulib-local/m4/libglib.m4
@@ -414,123 +266,6 @@ index 7ee5029..bb1e5e4 100644
AC_SUBST([LIBGLIB])
AC_SUBST([LTLIBGLIB])
AC_SUBST([INCGLIB])
diff --git a/libtextstyle/gnulib-m4/libcroco.m4 b/libtextstyle/gnulib-m4/libcroco.m4
index 39e72b1..042915a 100644
--- a/libtextstyle/gnulib-m4/libcroco.m4
+++ b/libtextstyle/gnulib-m4/libcroco.m4
@@ -6,97 +6,29 @@ dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
-dnl gl_LIBCROCO
-dnl gives the user the option to decide whether to use the included or
-dnl an external libcroco.
-dnl gl_LIBCROCO(FORCE-INCLUDED)
-dnl forces the use of the included or an external libcroco.
AC_DEFUN([gl_LIBCROCO],
[
- ifelse([$1], [yes], , [
- dnl libcroco depends on libglib.
- AC_REQUIRE([gl_LIBGLIB])
- ])
+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+ dnl libcroco depends on libglib.
+ AC_REQUIRE([gl_LIBGLIB])
- ifelse([$1], , [
- AC_MSG_CHECKING([whether included libcroco is requested])
- AC_ARG_WITH([included-libcroco],
- [ --with-included-libcroco use the libcroco included here],
- [gl_cv_libcroco_force_included=$withval],
- [gl_cv_libcroco_force_included=no])
- AC_MSG_RESULT([$gl_cv_libcroco_force_included])
- ], [gl_cv_libcroco_force_included=$1])
+ AC_MSG_CHECKING([whether included libcroco is requested])
+ AC_ARG_WITH([included-libcroco],
+ [ --with-included-libcroco use the libcroco included here],
+ [gl_cv_libcroco_force_included=$withval],
+ [gl_cv_libcroco_force_included=no])
+ AC_MSG_RESULT([$gl_cv_libcroco_force_included])
gl_cv_libcroco_use_included="$gl_cv_libcroco_force_included"
LIBCROCO=
LTLIBCROCO=
INCCROCO=
- ifelse([$1], [yes], , [
- if test "$gl_cv_libcroco_use_included" != yes; then
- dnl Figure out whether we can use a preinstalled libcroco-0.6, or have to
- dnl use the included one.
- AC_CACHE_VAL([gl_cv_libcroco], [
- gl_cv_libcroco=no
- gl_cv_LIBCROCO=
- gl_cv_LTLIBCROCO=
- gl_cv_INCCROCO=
- gl_save_LIBS="$LIBS"
- dnl Search for libcroco and define LIBCROCO_0_6, LTLIBCROCO_0_6 and
- dnl INCCROCO_0_6 accordingly.
- dnl Don't use croco-0.6-config nor pkg-config, since it doesn't work when
- dnl cross-compiling or when the C compiler in use is different from the
- dnl one that built the library.
- AC_LIB_LINKFLAGS_BODY([croco-0.6], [glib-2.0])
- LIBS="$gl_save_LIBS $LIBCROCO_0_6"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
- [[const char *version = LIBCROCO_VERSION; return !version;]])],
- [gl_cv_libcroco=yes
- gl_cv_LIBCROCO="$LIBCROCO_0_6"
- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
- ])
- if test "$gl_cv_libcroco" != yes; then
- gl_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCCROCO_0_6"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
- [[const char *version = LIBCROCO_VERSION; return !version;]])],
- [gl_cv_libcroco=yes
- gl_cv_LIBCROCO="$LIBCROCO_0_6"
- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
- gl_cv_INCCROCO="$INCCROCO_0_6"
- ])
- if test "$gl_cv_libcroco" != yes; then
- dnl Often the include files are installed in
- dnl /usr/include/libcroco-0.6/libcroco.
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
- [[const char *version = LIBCROCO_VERSION; return !version;]])],
- [gl_ABSOLUTE_HEADER([libcroco-0.6/libcroco/libcroco-config.h])
- libcroco_include_dir=`echo "$gl_cv_absolute_libcroco_0_6_libcroco_libcroco_config_h" | sed -e 's,.libcroco-config\.h$,,'`
- if test -d "$libcroco_include_dir"; then
- gl_cv_libcroco=yes
- gl_cv_LIBCROCO="$LIBCROCO_0_6"
- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
- gl_cv_INCCROCO="-I$libcroco_include_dir"
- fi
- ])
- fi
- CPPFLAGS="$gl_save_CPPFLAGS"
- fi
- LIBS="$gl_save_LIBS"
- ])
- AC_MSG_CHECKING([for libcroco])
- AC_MSG_RESULT([$gl_cv_libcroco])
- if test $gl_cv_libcroco = yes; then
- LIBCROCO="$gl_cv_LIBCROCO"
- LTLIBCROCO="$gl_cv_LTLIBCROCO"
- INCCROCO="$gl_cv_INCCROCO"
- else
- gl_cv_libcroco_use_included=yes
- fi
- fi
- ])
+ if test "$gl_cv_libcroco_use_included" != yes; then
+ PKG_CHECK_MODULES([CROCO], [libcroco-0.6])
+ LIBCROCO=$CROCO_LIBS
+ LTLIBCROCO=$CROCO_LIBS
+ INCCROCO=$CROCO_CFLAGS
+ fi
AC_SUBST([LIBCROCO])
AC_SUBST([LTLIBCROCO])
AC_SUBST([INCCROCO])
diff --git a/libtextstyle/gnulib-m4/libglib.m4 b/libtextstyle/gnulib-m4/libglib.m4
index 7ee5029..bb1e5e4 100644
--- a/libtextstyle/gnulib-m4/libglib.m4
@@ -655,55 +390,3 @@ index 7ee5029..bb1e5e4 100644
AC_SUBST([LIBGLIB])
AC_SUBST([LTLIBGLIB])
AC_SUBST([INCGLIB])
diff --git a/libtextstyle/lib/term-styled-ostream.c b/libtextstyle/lib/term-styled-ostream.c
index 5484800..16793fa 100644
--- a/libtextstyle/lib/term-styled-ostream.c
+++ b/libtextstyle/lib/term-styled-ostream.c
@@ -28,15 +28,15 @@
#include <stdlib.h>
-#include <cr-om-parser.h>
-#include <cr-sel-eng.h>
-#include <cr-style.h>
-#include <cr-rgb.h>
+#include <libcroco/cr-om-parser.h>
+#include <libcroco/cr-sel-eng.h>
+#include <libcroco/cr-style.h>
+#include <libcroco/cr-rgb.h>
/* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
#ifndef __CR_FONTS_H__
-# include <cr-fonts.h>
+# include <libcroco/cr-fonts.h>
#endif
-#include <cr-string.h>
+#include <libcroco/cr-string.h>
#include "term-ostream.h"
#include "mem-hash-map.h"
diff --git a/libtextstyle/lib/term-styled-ostream.oo.c b/libtextstyle/lib/term-styled-ostream.oo.c
index 2ff978f..5ffb17a 100644
--- a/libtextstyle/lib/term-styled-ostream.oo.c
+++ b/libtextstyle/lib/term-styled-ostream.oo.c
@@ -22,15 +22,15 @@
#include <stdlib.h>
-#include <cr-om-parser.h>
-#include <cr-sel-eng.h>
-#include <cr-style.h>
-#include <cr-rgb.h>
+#include <libcroco/cr-om-parser.h>
+#include <libcroco/cr-sel-eng.h>
+#include <libcroco/cr-style.h>
+#include <libcroco/cr-rgb.h>
/* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
#ifndef __CR_FONTS_H__
-# include <cr-fonts.h>
+# include <libcroco/cr-fonts.h>
#endif
-#include <cr-string.h>
+#include <libcroco/cr-string.h>
#include "term-ostream.h"
#include "mem-hash-map.h"

View File

@@ -10,8 +10,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=c678957b0c8e964aa6c70fd77641a71e"
# without libxml in PACKAGECONFIG vendor copy of the lib will be used
LICENSE:append = " ${@bb.utils.contains('PACKAGECONFIG', 'libxml', '', '& MIT', d)}"
LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'libxml', '', 'file://libtextstyle/lib/libxml/COPYING;md5=2044417e2e5006b65a8b9067b683fcf1', d)}"
# without croco in PACKAGECONFIG vendor copy of the lib will be used
LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'croco', '', 'file://libtextstyle/lib/libcroco/libcroco.h;md5=424013a9ed5401aa58cf83f3188c6865;beginline=10;endline=28', d)}"
# without glib in PACKAGECONFIG vendor copy of the lib will be used
LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'glib', '', 'file://libtextstyle/lib/glib/ghash.c;md5=e3159f5ac38dfe77af5cc0ee104dab2d;beginline=10;endline=27', d)}"
@@ -44,6 +42,7 @@ EXTRA_OECONF += "--without-lispdir \
--without-emacs \
--without-cvs \
--without-git \
--without-included-libcroco \
--cache-file=${B}/config.cache \
"
EXTRA_OECONF:append:class-target = " \
@@ -54,11 +53,10 @@ EXTRA_OECONF:append:class-target = " \
gt_cv_locale_de=de_DE.ISO-8859-1 \
"
PACKAGECONFIG ??= "croco glib libxml"
PACKAGECONFIG ??= "glib libxml"
PACKAGECONFIG:class-native = ""
PACKAGECONFIG:class-nativesdk = ""
PACKAGECONFIG[croco] = "--without-included-libcroco,--with-included-libcroco,libcroco"
PACKAGECONFIG[glib] = "--without-included-glib,--with-included-glib,glib-2.0"
PACKAGECONFIG[libxml] = "--without-included-libxml,--with-included-libxml,libxml2"
# Need paths here to avoid host contamination but this can cause RPATH warnings

View File

@@ -1,192 +0,0 @@
From fdf78a4877afa987ba646a8779b513f258e6d04c Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@gnome.org>
Date: Fri, 31 Jul 2020 15:21:53 -0500
Subject: [PATCH] libcroco: Limit recursion in block and any productions
(CVE-2020-12825)
If we don't have any limits, we can recurse forever and overflow the
stack.
Fixes #8
This is per https://gitlab.gnome.org/Archive/libcroco/-/issues/8
https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1404
CVE: CVE-2020-12825
Upstream-Status: Backport [https://gitlab.gnome.org/Archive/libcroco/-/commit/6eb257e5c731c691eb137fca94e916ca73941a5a]
Comment: No refreshing changes done.
Signed-off-by: Saloni Jain <Saloni.Jain@kpit.com>
---
src/cr-parser.c | 44 +++++++++++++++++++++++++++++---------------
1 file changed, 29 insertions(+), 15 deletions(-)
diff --git a/src/cr-parser.c b/src/cr-parser.c
index 18c9a01..f4a62e3 100644
--- a/src/cr-parser.c
+++ b/src/cr-parser.c
@@ -136,6 +136,8 @@ struct _CRParserPriv {
#define CHARS_TAB_SIZE 12
+#define RECURSIVE_CALLERS_LIMIT 100
+
/**
* IS_NUM:
*@a_char: the char to test.
@@ -344,9 +346,11 @@ static enum CRStatus cr_parser_parse_selector_core (CRParser * a_this);
static enum CRStatus cr_parser_parse_declaration_core (CRParser * a_this);
-static enum CRStatus cr_parser_parse_any_core (CRParser * a_this);
+static enum CRStatus cr_parser_parse_any_core (CRParser * a_this,
+ guint n_calls);
-static enum CRStatus cr_parser_parse_block_core (CRParser * a_this);
+static enum CRStatus cr_parser_parse_block_core (CRParser * a_this,
+ guint n_calls);
static enum CRStatus cr_parser_parse_value_core (CRParser * a_this);
@@ -784,7 +788,7 @@ cr_parser_parse_atrule_core (CRParser * a_this)
cr_parser_try_to_skip_spaces_and_comments (a_this);
do {
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, 0);
} while (status == CR_OK);
status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr,
@@ -795,7 +799,7 @@ cr_parser_parse_atrule_core (CRParser * a_this)
cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
token);
token = NULL;
- status = cr_parser_parse_block_core (a_this);
+ status = cr_parser_parse_block_core (a_this, 0);
CHECK_PARSING_STATUS (status,
FALSE);
goto done;
@@ -930,11 +934,11 @@ cr_parser_parse_selector_core (CRParser * a_this)
RECORD_INITIAL_POS (a_this, &init_pos);
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, 0);
CHECK_PARSING_STATUS (status, FALSE);
do {
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, 0);
} while (status == CR_OK);
@@ -956,10 +960,12 @@ cr_parser_parse_selector_core (CRParser * a_this)
*in chapter 4.1 of the css2 spec.
*block ::= '{' S* [ any | block | ATKEYWORD S* | ';' ]* '}' S*;
*@param a_this the current instance of #CRParser.
+ *@param n_calls used to limit recursion depth
*FIXME: code this function.
*/
static enum CRStatus
-cr_parser_parse_block_core (CRParser * a_this)
+cr_parser_parse_block_core (CRParser * a_this,
+ guint n_calls)
{
CRToken *token = NULL;
CRInputPos init_pos;
@@ -967,6 +973,9 @@ cr_parser_parse_block_core (CRParser * a_this)
g_return_val_if_fail (a_this && PRIVATE (a_this), CR_BAD_PARAM_ERROR);
+ if (n_calls > RECURSIVE_CALLERS_LIMIT)
+ return CR_ERROR;
+
RECORD_INITIAL_POS (a_this, &init_pos);
status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token);
@@ -996,13 +1005,13 @@ cr_parser_parse_block_core (CRParser * a_this)
} else if (token->type == CBO_TK) {
cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token);
token = NULL;
- status = cr_parser_parse_block_core (a_this);
+ status = cr_parser_parse_block_core (a_this, n_calls + 1);
CHECK_PARSING_STATUS (status, FALSE);
goto parse_block_content;
} else {
cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token);
token = NULL;
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
CHECK_PARSING_STATUS (status, FALSE);
goto parse_block_content;
}
@@ -1109,7 +1118,7 @@ cr_parser_parse_value_core (CRParser * a_this)
status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
token);
token = NULL;
- status = cr_parser_parse_block_core (a_this);
+ status = cr_parser_parse_block_core (a_this, 0);
CHECK_PARSING_STATUS (status, FALSE);
ref++;
goto continue_parsing;
@@ -1123,7 +1132,7 @@ cr_parser_parse_value_core (CRParser * a_this)
status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
token);
token = NULL;
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, 0);
if (status == CR_OK) {
ref++;
goto continue_parsing;
@@ -1162,10 +1171,12 @@ cr_parser_parse_value_core (CRParser * a_this)
* | FUNCTION | DASHMATCH | '(' any* ')' | '[' any* ']' ] S*;
*
*@param a_this the current instance of #CRParser.
+ *@param n_calls used to limit recursion depth
*@return CR_OK upon successfull completion, an error code otherwise.
*/
static enum CRStatus
-cr_parser_parse_any_core (CRParser * a_this)
+cr_parser_parse_any_core (CRParser * a_this,
+ guint n_calls)
{
CRToken *token1 = NULL,
*token2 = NULL;
@@ -1174,6 +1185,9 @@ cr_parser_parse_any_core (CRParser * a_this)
g_return_val_if_fail (a_this, CR_BAD_PARAM_ERROR);
+ if (n_calls > RECURSIVE_CALLERS_LIMIT)
+ return CR_ERROR;
+
RECORD_INITIAL_POS (a_this, &init_pos);
status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token1);
@@ -1212,7 +1226,7 @@ cr_parser_parse_any_core (CRParser * a_this)
*We consider parameter as being an "any*" production.
*/
do {
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
} while (status == CR_OK);
ENSURE_PARSING_COND (status == CR_PARSING_ERROR);
@@ -1237,7 +1251,7 @@ cr_parser_parse_any_core (CRParser * a_this)
}
do {
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
} while (status == CR_OK);
ENSURE_PARSING_COND (status == CR_PARSING_ERROR);
@@ -1265,7 +1279,7 @@ cr_parser_parse_any_core (CRParser * a_this)
}
do {
- status = cr_parser_parse_any_core (a_this);
+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
} while (status == CR_OK);
ENSURE_PARSING_COND (status == CR_PARSING_ERROR);

View File

@@ -1,26 +0,0 @@
SUMMARY = "Cascading Style Sheet (CSS) parsing and manipulation toolkit"
DESCRIPTION = "The Libcroco project is an effort to build a generic \
Cascading Style Sheet (CSS) parsing and manipulation toolkit that can be \
used by GNOME applications in need of CSS support."
HOMEPAGE = "http://www.gnome.org/"
BUGTRACKER = "https://bugzilla.gnome.org/"
LICENSE = "LGPL-2.0-only & LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605 \
file://src/cr-rgb.c;endline=22;md5=31d5f0944d556c8589d04ea6055fcc66 \
file://tests/cr-test-utils.c;endline=21;md5=2382c27934cae1d3792fcb17a6142c4e"
SECTION = "x11/utils"
DEPENDS = "glib-2.0 libxml2 zlib"
BBCLASSEXTEND = "native nativesdk"
EXTRA_OECONF += "--enable-Bsymbolic=auto"
BINCONFIG = "${bindir}/croco-0.6-config"
inherit gnomebase gtk-doc binconfig-disabled
SRC_URI[archive.md5sum] = "c80c5a8385011a0260dce6bd0da93dce"
SRC_URI[archive.sha256sum] = "767ec234ae7aa684695b3a735548224888132e063f92db585759b422570621d4"
SRC_URI +="file://CVE-2020-12825.patch \
"