@@ -2760,7 +2760,7 @@ load_exports(const uint8 **p_buf, const uint8 *buf_end, AOTModule *module,
27602760 const uint8 * buf = * p_buf ;
27612761 AOTExport * exports ;
27622762 uint64 size ;
2763- uint32 i ;
2763+ uint32 i , j ;
27642764
27652765 /* Allocate memory */
27662766 size = sizeof (AOTExport ) * (uint64 )module -> export_count ;
@@ -2774,14 +2774,60 @@ load_exports(const uint8 **p_buf, const uint8 *buf_end, AOTModule *module,
27742774 read_uint32 (buf , buf_end , exports [i ].index );
27752775 read_uint8 (buf , buf_end , exports [i ].kind );
27762776 read_string (buf , buf_end , exports [i ].name );
2777- #if 0 /* TODO: check kind and index */
2778- if (export_funcs [i ].index >=
2779- module -> func_count + module -> import_func_count ) {
2780- set_error_buf (error_buf , error_buf_size ,
2781- "function index is out of range" );
2782- return false;
2777+
2778+ for (j = 0 ; j < i ; j ++ ) {
2779+ if (!strcmp (exports [i ].name , exports [j ].name )) {
2780+ set_error_buf (error_buf , error_buf_size ,
2781+ "duplicate export name" );
2782+ return false;
2783+ }
27832784 }
2785+
2786+ /* Check export kind and index */
2787+ switch (exports [i ].kind ) {
2788+ case EXPORT_KIND_FUNC :
2789+ if (exports [i ].index
2790+ >= module -> import_func_count + module -> func_count ) {
2791+ set_error_buf (error_buf , error_buf_size ,
2792+ "unknown function" );
2793+ return false;
2794+ }
2795+ break ;
2796+ case EXPORT_KIND_TABLE :
2797+ if (exports [i ].index
2798+ >= module -> import_table_count + module -> table_count ) {
2799+ set_error_buf (error_buf , error_buf_size , "unknown table" );
2800+ return false;
2801+ }
2802+ break ;
2803+ case EXPORT_KIND_MEMORY :
2804+ if (exports [i ].index
2805+ >= module -> import_memory_count + module -> memory_count ) {
2806+ set_error_buf (error_buf , error_buf_size , "unknown memory" );
2807+ return false;
2808+ }
2809+ break ;
2810+ case EXPORT_KIND_GLOBAL :
2811+ if (exports [i ].index
2812+ >= module -> import_global_count + module -> global_count ) {
2813+ set_error_buf (error_buf , error_buf_size , "unknown global" );
2814+ return false;
2815+ }
2816+ break ;
2817+ #if WASM_ENABLE_TAGS != 0
2818+ /* TODO
2819+ case EXPORT_KIND_TAG:
2820+ if (index >= module->import_tag_count + module->tag_count) {
2821+ set_error_buf(error_buf, error_buf_size, "unknown tag");
2822+ return false;
2823+ }
2824+ break;
2825+ */
27842826#endif
2827+ default :
2828+ set_error_buf (error_buf , error_buf_size , "invalid export kind" );
2829+ return false;
2830+ }
27852831 }
27862832
27872833 * p_buf = buf ;
0 commit comments