Bug #79576 [PATCH]: "const TYPE *" is not parsed properly when type is not defined

From: Date: Tue, 14 Sep 2021 15:09:39 +0000
Subject: Bug #79576 [PATCH]: "const TYPE *" is not parsed properly when type is not defined
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-236601@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79576&edit=1 ID: 79576 Patch added by: cmb@php.net Reported by: grzegorz129 at gmail dot com Summary: "const TYPE *" is not parsed properly when type is not defined Status: Open Type: Bug Package: *Extensibility Functions Operating System: macOS 10.15.4 PHP Version: 7.4.5 Block user comment: N Private report: N New Comment: The following pull request has been associated: Patch Name: In FFI, assume that identifier is a typedef if followed by '*' in parameter list On GitHub: https://github.com/php/php-src/pull/5733 Patch: https://github.com/php/php-src/pull/5733.patch Previous Comments: ------------------------------------------------------------------------ [2020-06-17 21:03:43] alexdowad@php.net Just hacked up a little patch which improves the error messages in this (and similar) cases. I'm sure there are other cases which it doesn't cover, but anyways, I'll submit it and see what the maintainers say. ------------------------------------------------------------------------ [2020-05-09 12:16:55] cmb@php.net This is closely related to bug #78253, if not a duplicate. ------------------------------------------------------------------------ [2020-05-08 19:23:45] grzegorz129 at gmail dot com Yes, in this example (since I'm only slightly familiar with C) it took ma a longer while to realize that the definition is correct but the type is missing. However, another example where I've got the same error about unsupported type was much more complex and really made me believe it's not supported (while in reality it was just missing "netsnmp_variable_list" typedef): struct tree { #... int (*printomat) (u_char **, size_t *, size_t *, int, const netsnmp_variable_list *, const struct enum_list *, const char *, const char *); #... } ------------------------------------------------------------------------ [2020-05-08 19:11:45] nikic@php.net Is the "bug" here that the error message should be improved? GCC reports this as: > test.c:4:29: error: unknown type name ‘oid’ which is more obvious. ------------------------------------------------------------------------ [2020-05-08 18:52:12] grzegorz129 at gmail dot com Description: ------------ When parsing function declarations containing "const CUSTOM_TYPE *" the FFI modules wrongly states that unsupported specifier combination was used. When type is properly defined the FFI module is able to parse them without a problem. Test script: --------------- <?php //Result: no error \FFI::cdef(' typedef unsigned long u_long; typedef u_long oid; struct tree *get_tree(const oid *, size_t, struct tree *); '); //vs. //Result: FFI\ParserException: unsupported type specifier combination at line 1 \FFI::cdef('struct tree *get_tree(const oid *, size_t, struct tree *);'); Expected result: ---------------- FFI\ParserException: undefined C type 'oid' Actual result: -------------- FFI\ParserException: unsupported type specifier combination ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=79576&edit=1

« previous php.bugs (#236601) next »