cURL / Mailing Lists / curl-library / Single Mail

curl-library

Broken C Code

From: Andreas Zwinkau <zwinkau_at_kit.edu>
Date: Fri, 18 Feb 2011 16:15:49 +0100

Hi,
i am trying to compile Curl with cparser[0], but it breaks, because of
some invalid C code. The problem is in typecheck-gcc.h:

  #define _curl_is_any_ptr(expr) (sizeof(expr) == sizeof(void*))

Sometimes expr is a function type. E.g. this line from the git source:

  curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite);

The gcc behavior deviates from the ANSI C Standard.

* ANSI: The sizeof operator shall not be applied to an expression that
has function type
* GCC: returns 1

A return value of 1 is arbitrary and should not be relied on. The
_curl_is_any_ptr macro is broken in multiple ways. For example, it
also evaluates to true, if expr is int, on most architectures. So i
think the macro does not work as intended.

A counter-argument would be that is ok that typecheck-gcc.h relies on
implementation-specific gcc behavior, but non-portable code should be
avoided.

cheers

-- 
Andreas Zwinkau
 Karlsruhe Institute of Technology (KIT)
 Institut für Programmstrukturen und Datenorganisation (IPD)
 Lehrstuhl Prof. Snelting
 Adenauerring 20a
 76131 Karlsruhe
 Phone:  +49 721 608-4-8351
 Fax:    +49 721 608-4-8457
 Email:  zwinkau_at_kit.edu
 Web:    http://pp.info.uni-karlsruhe.de/person.php?id=107
 KIT – University of the State of Baden-Wuerttemberg and
 National Research Center of the Helmholtz Association
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html
Received on 2011-02-18