Re: [PATCH] Two trivial fixes for Control Flow Integrity support

Vlad Tsyrklevich via xml <[email protected]>
Newsgroups gmane.comp.gnome.lib.xml.general
Message-ID <CALz_-Taz389-en7KKYx4VFR0FnZD=ffuAXe7bWHbeYVnr0rx7Q@mail.gmail.com>
I've updated the patches.

On Wed, Nov 8, 2017 at 11:46 AM Nick Wellnhofer <[email protected]> wrote:

> On 08/11/2017 19:48, Vlad Tsyrklevich via xml wrote:
> > The patches fix type signature mismatches with xmlNop() and
> > xmlMemStrdup(). The first patch sets xmlNop() to have the same type
> > signature as xmlInputReadCallback, which is the only type it's ever
> > cast to.
>
> Can you rename xmlNop to something like xmlInputNopReadCallback and remove
> the
> now unnecessary casts when it is used? Also annotate the unused parameters
> with ATTRIBUTE_UNUSED.
>
> > Under some compiler flags, xmlMemStrdup() is a function
> > pointer pointing to xmlStrdup() despite a mismatched type signature.
> > In that case I set it to strdup() instead since it has the correct
> > type signature and the other xmlMem(Malloc|Realloc|Free) function
> > pointers around it point directly to the libc implementations as well.
>
> strdup is a POSIX extension and can't be used for platform compatibility
> reasons. You'll probably have to write a wrapper around xmlStrdup.
>
> If possible, please format patches with git-format-patch.
>
> Nick
>
>

_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
https://mail.gnome.org/mailman/listinfo/xml
0001-Refactor-name-and-type-signature-for-xmlNop.patch (text/x-patch, 2.4 KB)
From 09bcc4425132644c8a894f05325c68578298d5a3 Mon Sep 17 00:00:00 2001
From: Vlad Tsyrklevich <[email protected]>
Date: Thu, 10 Aug 2017 15:08:48 -0700
Subject: [PATCH 1/2] Refactor name and type signature for xmlNop

Update xmlNop's name to xmlInputReadCallbackNop and its type signature
to match xmlInputReadCallback.
---
 libxml.h |  2 +-
 parser.c |  3 ++-
 xmlIO.c  | 10 ++++++----
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/libxml.h b/libxml.h
index 4fe56d21..2efa7047 100644
--- a/libxml.h
+++ b/libxml.h
@@ -96,7 +96,7 @@ int __xmlRandom(void);
 #endif
 
 XMLPUBFUN xmlChar * XMLCALL xmlEscapeFormatString(xmlChar **msg);
-int xmlNop(void);
+int xmlInputReadCallbackNop(void *context, char *buffer, int len);
 
 #ifdef IN_LIBXML
 #ifdef __GNUC__
diff --git a/parser.c b/parser.c
index 1c5e036e..515ced5f 100644
--- a/parser.c
+++ b/parser.c
@@ -2086,7 +2086,8 @@ static void xmlGROW (xmlParserCtxtPtr ctxt) {
 
     if (((curEnd > (unsigned long) XML_MAX_LOOKUP_LIMIT) ||
          (curBase > (unsigned long) XML_MAX_LOOKUP_LIMIT)) &&
-         ((ctxt->input->buf) && (ctxt->input->buf->readcallback != (xmlInputReadCallback) xmlNop)) &&
+         ((ctxt->input->buf) &&
+          (ctxt->input->buf->readcallback != xmlInputReadCallbackNop)) &&
         ((ctxt->options & XML_PARSE_HUGE) == 0)) {
         xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "Huge input lookup");
         xmlHaltParser(ctxt);
diff --git a/xmlIO.c b/xmlIO.c
index 0fd8c496..1d490954 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -703,14 +703,16 @@ xmlCheckFilename (const char *path)
 }
 
 /**
- * xmlNop:
+ * xmlInputReadCallbackNop:
  *
- * No Operation function, does nothing, no input
+ * No Operation xmlInputReadCallback function, does nothing.
  *
  * Returns zero
  */
 int
-xmlNop(void) {
+xmlInputReadCallbackNop(void *context ATTRIBUTE_UNUSED,
+                        char *buffer ATTRIBUTE_UNUSED,
+                        int len ATTRIBUTE_UNUSED) {
     return(0);
 }
 
@@ -2932,7 +2934,7 @@ xmlParserInputBufferCreateMem(const char *mem, int size, xmlCharEncoding enc) {
     ret = xmlAllocParserInputBuffer(enc);
     if (ret != NULL) {
         ret->context = (void *) mem;
-	ret->readcallback = (xmlInputReadCallback) xmlNop;
+	ret->readcallback = xmlInputReadCallbackNop;
 	ret->closecallback = NULL;
 	errcode = xmlBufAdd(ret->buffer, (const xmlChar *) mem, size);
 	if (errcode != 0) {
-- 
2.15.0.448.gf294e3d99a-goog
0002-Introduce-xmlPosixStrdup-and-update-xmlMemStrdup.patch (text/x-patch, 2.1 KB)
From de00a77e1df3ecd357835586abec8508f7c3cc47 Mon Sep 17 00:00:00 2001
From: Vlad Tsyrklevich <[email protected]>
Date: Wed, 8 Nov 2017 15:28:19 -0800
Subject: [PATCH 2/2] Introduce xmlPosixStrdup and update xmlMemStrdup

Introduce xmlPosixStrdup, an internal strdup implementation matching the
POSIX strdup type signature, and update xmlMemStrdup to use it.
---
 globals.c                  |  2 +-
 include/libxml/xmlstring.h |  2 ++
 xmlstring.c                | 14 ++++++++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/globals.c b/globals.c
index e351b03f..96865d68 100644
--- a/globals.c
+++ b/globals.c
@@ -131,7 +131,7 @@ xmlReallocFunc xmlRealloc = (xmlReallocFunc) realloc;
  *
  * Returns the copy of the string or NULL in case of error
  */
-xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlStrdup;
+xmlStrdupFunc xmlMemStrdup = xmlPosixStrdup;
 #endif /* DEBUG_MEMORY_LOCATION || DEBUG_MEMORY */
 
 #include <libxml/threads.h>
diff --git a/include/libxml/xmlstring.h b/include/libxml/xmlstring.h
index 2d0b2d16..df77c3ac 100644
--- a/include/libxml/xmlstring.h
+++ b/include/libxml/xmlstring.h
@@ -47,6 +47,8 @@ XMLPUBFUN xmlChar * XMLCALL
                                          int len);
 XMLPUBFUN xmlChar * XMLCALL
                 xmlCharStrdup            (const char *cur);
+XMLPUBFUN char * XMLCALL
+                xmlPosixStrdup           (const char *cur);
 XMLPUBFUN xmlChar * XMLCALL
                 xmlStrsub                (const xmlChar *str,
                                          int start,
diff --git a/xmlstring.c b/xmlstring.c
index 8d2e06f6..547f9577 100644
--- a/xmlstring.c
+++ b/xmlstring.c
@@ -118,6 +118,20 @@ xmlCharStrdup(const char *cur) {
     return(xmlCharStrndup(cur, p - cur));
 }
 
+/**
+ * xmlPosixStrdup
+ * @cur:  the input char *
+ *
+ * a strdup implementation with a type signature matching POSIX
+ *
+ * Returns a new xmlChar * or NULL
+ */
+
+char *
+xmlPosixStrdup(const char *cur) {
+    return((char*)xmlCharStrdup(cur));
+}
+
 /**
  * xmlStrcmp:
  * @str1:  the first xmlChar *
-- 
2.15.0.448.gf294e3d99a-goog
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.