|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #79576 "const TYPE *" is not parsed properly when type is not defined
Submitted: 2020-05-08 18:52 UTC Modified: 2020-05-09 12:16 UTC
From: grzegorz129 at gmail dot com Assigned:
Status: Open Package: *Extensibility Functions
PHP Version: 7.4.5 OS: macOS 10.15.4
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2020-05-08 18:52 UTC] grzegorz129 at gmail dot com
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:

//Result: no error
    typedef	unsigned long u_long;
    typedef u_long oid;
    struct tree    *get_tree(const oid *, size_t, struct tree *);


//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


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2020-05-08 19:11 UTC]
-Status: Open +Status: Feedback
 [2020-05-08 19:11 UTC]
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 19:23 UTC] 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-09 12:16 UTC]
-Status: Feedback +Status: Open
 [2020-05-09 12:16 UTC]
This is closely related to bug #78253, if not a duplicate.
 [2020-06-17 21:03 UTC]
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.
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Wed Jul 28 20:01:23 2021 UTC