php.net |  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
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: grzegorz129 at gmail dot com
New email:
PHP Version: OS:

 

 [2020-05-08 18:52 UTC] 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

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

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