[foreign-jextract] RFR: 8239128: Macro defines constant pointers can crash VM via jextract API
Henry Jen
henryjen at openjdk.java.net
Tue Feb 18 01:15:27 UTC 2020
On Mon, 17 Feb 2020 13:42:02 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:
>> The fundamental issue of the crash is that clang cursor/type may no longer valid after reparse another macro, and with pointer type lazily resolve the pointee type, if the clang cursor/type no longer valid, access invalid memory cause the crash.
>>
>> The other issue is the a macro pointer to a record type like struct/union can cause NPE, and that cause the macro to be ignored on generation without a warning.
>>
>> The fix remove the laziness from Type API perspective, but leave that as an implementation detail, so implementation of Pointer type need to figure out how to do that safely internally.
>>
>> Record type in macro are reduces to void, as currently the Declaration implementation is depending on clang as well, we cannot guarantee that works after reparse.
>
> src/jdk.incubator.jextract/share/classes/jdk/internal/jextract/impl/TypeImpl.java line 150:
>
>> 149:
>> 150: public PointerImpl(Type pointee) {
>> 151: super(Kind.POINTER, Optional.empty());
>
> Can't we implement this constructor by creating a factory which always return the same pointee (e.g. the constructor parameter) and drop the pointee field?
No, note that the design is to throw away factory after used(resolved), because there is no guarantee that factory can still work in this case. Which is why we call type() in TypeMaker.resolveTypeReferences()
-------------
PR: https://git.openjdk.java.net/panama-foreign/pull/21
More information about the panama-dev
mailing list