Huw Davies (@huw) commented about dlls/nsi/nsi.c:
data[2], sizes[2], data[3], sizes[3], &num ); if (err != ERROR_MORE_DATA) break; TRACE( "Short buffer, attempt %d.\n", attempt ); + err = NsiEnumerateObjectsAllParameters( unk, 0, module, table, NULL, 0, NULL, 0, NULL, 0, NULL, 0, &num ); + if (err) goto err; NsiFreeTable( data[0], data[1], data[2], data[3] ); memset( data, 0, sizeof(data) ); - err = NsiEnumerateObjectsAllParameters( unk, 0, module, table, NULL, 0, NULL, 0, NULL, 0, NULL, 0, &num ); - if (err) return err; + err = ERROR_OUTOFMEMORY; /* fail if this is the last attempt */
I'd prefer to keep this patch simpler by just adding ```c err = ERROR_OUTOFMEMORY; ``` to the end of the for loop body. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/1978#note_21116