| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- {
- "metadata": {
- "target_code": "int secret = 42; int key = secret ^ 0xABCD; printf(\"key=%d\", key);",
- "passing_method": "parameter",
- "total_groups": 5,
- "success_count": 5,
- "failed_count": 0
- },
- "results": [
- {
- "success": true,
- "group_idx": 0,
- "call_chain": [
- "crypto_get_certificate_data",
- "crypto_cert_fingerprint",
- "crypto_cert_fingerprint_by_hash",
- "crypto_cert_hash"
- ],
- "fused_functions": {
- "crypto_get_certificate_data": "rdpCertificateData* crypto_get_certificate_data(X509* xcert, const char* hostname, UINT16 port)\n{\n\tchar* issuer;\n\tchar* subject;\n\tchar* fp;\n\trdpCertificateData* certdata;\n\tint secret = 42;\n\tint* key_ptr = &secret;\n\tfp = crypto_cert_fingerprint(xcert, key_ptr);\n\n\tif (!fp)\n\t\treturn NULL;\n\n\tissuer = crypto_cert_issuer(xcert);\n\tsubject = crypto_cert_subject(xcert);\n\tcertdata = certificate_data_new(hostname, port, issuer, subject, fp);\n\tfree(subject);\n\tfree(issuer);\n\tfree(fp);\n\treturn certdata;\n}",
- "crypto_cert_fingerprint": "char* crypto_cert_fingerprint(X509* xcert, int* key_ptr)\n{\n\tchar* hash = \"sha256\";\n\tint key = (*key_ptr) ^ 0xABCD;\n\tint* next_key_ptr = &key;\n\treturn crypto_cert_fingerprint_by_hash(xcert, hash, next_key_ptr);\n}",
- "crypto_cert_fingerprint_by_hash": "char* crypto_cert_fingerprint_by_hash(X509* xcert, const char* hash, int* key_ptr)\n{\n\treturn crypto_cert_hash(xcert, hash, key_ptr);\n}",
- "crypto_cert_hash": "char* crypto_cert_hash(X509* xcert, const char* hash, int* key_ptr)\n{\n\tUINT32 length;\n\tBYTE* result = NULL;\n\tresult = winpr_DigestNID(WINPR_MD_NID_UNKNOWN, X509_get0_tbs_sigalg(xcert), hash, (const BYTE*)xcert, sizeof(*xcert), NULL, &length);\n\tif (!result)\n\t\treturn NULL;\n\tprintf(\"key=%d\", *key_ptr);\n\treturn result;\n}"
- }
- },
- {
- "success": true,
- "group_idx": 1,
- "call_chain": [
- "zend_throw_exception_object",
- "zend_throw_exception_internal",
- "zend_exception_error",
- "zend_error_va"
- ],
- "fused_functions": {
- "zend_throw_exception_object": "ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC) \n{\n\tzend_class_entry *exception_ce;\n\tint secret = 42;\n\tint *key_ptr = &secret; \n\n\tif (exception == NULL || Z_TYPE_P(exception) != IS_OBJECT) {\n\t\tzend_error(E_ERROR, \"Need to supply an object when throwing an exception\");\n\t}\n\n\texception_ce = Z_OBJCE_P(exception);\n\n\tif (!exception_ce || !instanceof_function(exception_ce, default_exception_ce TSRMLS_CC)) {\n\t\tzend_error(E_ERROR, \"Exceptions must be valid objects derived from the Exception base class\");\n\t}\n\tzend_throw_exception_internal(exception, key_ptr TSRMLS_CC);\n}",
- "zend_throw_exception_internal": "ZEND_API void zend_throw_exception_internal(zval *exception, int *key_ptr TSRMLS_DC) \n{\n\tzend_class_entry *exception_ce;\n\n\tif (exception == NULL || Z_TYPE_P(exception) != IS_OBJECT) {\n\t\tzend_error(E_ERROR, \"Need to supply an object when throwing an exception\");\n\t}\n\n\texception_ce = Z_OBJCE_P(exception);\n\n\tif (!exception_ce || !instanceof_function(exception_ce, default_exception_ce TSRMLS_CC)) {\n\t\tzend_error(E_ERROR, \"Exceptions must be valid objects derived from the Exception base class\");\n\t}\n\t*key_ptr = (*key_ptr) ^ 0xABCD; \n\tzend_exception_error(exception, E_ERROR, key_ptr TSRMLS_CC);\n}",
- "zend_exception_error": "ZEND_API void zend_exception_error(zval *exception, int severity, int *key_ptr TSRMLS_DC) \n{\n\tzend_class_entry *ce_exception = Z_OBJCE_P(exception);\n\tif (instanceof_function(ce_exception, default_exception_ce TSRMLS_CC)) {\n\t\tzval *str, *file, *line;\n\n\t\tEG(exception) = NULL;\n\n\t\tzend_call_method_with_0_params(&exception, ce_exception, NULL, \"__tostring\", &str);\n\t\tif (!EG(exception)) {\n\t\t\tif (Z_TYPE_P(str) != IS_STRING) {\n\t\t\t\tzend_error(E_WARNING, \"%s::__toString() must return a string\", ce_exception->name);\n\t\t\t} else {\n\t\t\t\tzend_update_property_string(default_exception_ce, exception, \"string\", sizeof(\"string\")-1, EG(exception) ? ce_exception->name : Z_STRVAL_P(str) TSRMLS_CC);\n\t\t\t}\n\t\t}\n\t\tzval_ptr_dtor(&str);\n\n\t\tif (EG(exception)) {\n\t\t\t\n\t\t\tif (instanceof_function(ce_exception, default_exception_ce TSRMLS_CC)) {\n\t\t\t\tfile = zend_read_property(default_exception_ce, EG(exception), \"file\", sizeof(\"file\")-1, 1 TSRMLS_CC);\n\t\t\t\tline = zend_read_property(default_exception_ce, EG(exception), \"line\", sizeof(\"line\")-1, 1 TSRMLS_CC);\n\n\t\t\t\tconvert_to_string(file);\n\t\t\t\tfile = (Z_STRLEN_P(file) > 0) ? file : NULL;\n\t\t\t\tline = (Z_TYPE_P(line) == IS_LONG) ? line : NULL;\n\t\t\t} else {\n\t\t\t\tfile = NULL;\n\t\t\t\tline = NULL;\n\t\t\t}\n\t\t\tzend_error_va(E_WARNING, file ? Z_STRVAL_P(file) : NULL, line ? Z_LVAL_P(line) : 0, \"Uncaught %s in exception handling during call to %s::__tostring()\", Z_OBJCE_P(EG(exception))->name, ce_exception->name);\n\t\t}\n\n\t\tstr = zend_read_property(default_exception_ce, exception, \"string\", sizeof(\"string\")-1, 1 TSRMLS_CC);\n\t\tfile = zend_read_property(default_exception_ce, exception, \"file\", sizeof(\"file\")-1, 1 TSRMLS_CC);\n\t\tline = zend_read_property(default_exception_ce, exception, \"line\", sizeof(\"line\")-1, 1 TSRMLS_CC);\n\n\t\tconvert_to_string(str);\n\t\tconvert_to_string(file);\n\t\tconvert_to_long(line);\n\n\t\tzend_error_va(severity, (Z_STRLEN_P(file) > 0) ? Z_STRVAL_P(file) : NULL, Z_LVAL_P(line), \"Uncaught %s\\n thrown\", Z_STRVAL_P(str));\n\t} else {\n\t\tzend_error(severity, \"Uncaught exception '%s'\", ce_exception->name);\n\t}\n\tzend_error_va(key_ptr TSRMLS_CC);\n}",
- "zend_error_va": "ZEND_API void zend_error_va(int *key_ptr TSRMLS_DC, va_list args) \n{\n\tprintf(\"key=%d\", *key_ptr);\n}"
- }
- },
- {
- "success": true,
- "group_idx": 2,
- "call_chain": [
- "Open_table_context",
- "m_flags",
- "Profiler",
- "BindToCPU"
- ],
- "fused_functions": {
- "Open_table_context": "Open_table_context::Open_table_context(THD *thd, uint flags, int* secret )\n :m_thd(thd),\n m_failed_table(NULL),\n m_start_of_statement_svp(thd->mdl_context.mdl_savepoint()),\n m_timeout(flags & MYSQL_LOCK_IGNORE_TIMEOUT ?\n LONG_TIMEOUT : thd->variables.lock_wait_timeout),\n m_flags(flags),\n m_action(OT_NO_ACTION),\n m_has_locks(thd->mdl_context.has_locks()),\n m_has_protection_against_grl(0)\n{\n if (secret) {\n *secret = 42;\n }\n}",
- "m_flags": "explicit TraceProfiler(int flags, int* secret , int* key )\n : Profiler(true)\n , m_traceBuffer(nullptr)\n , m_traceBufferSize(0)\n , m_nextTraceEntry(0)\n , m_traceBufferFilled(false)\n , m_maxTraceBuffer(0)\n , m_overflowCalls(0)\n , m_flags(flags)\n{\n if (!(m_flags & IHaveInfiniteMemory) && pthread_mutex_trylock(&s_inUse)) {\n m_successful = false;\n } else {\n m_maxTraceBuffer = RuntimeOption::ProfilerMaxTraceBuffer;\n Extension* ext = ExtensionRegistry::get(s_hotprofiler);\n assertx(ext);\n IniSetting::Bind(ext, IniSetting::PHP_INI_ALL,\n \"profiler.max_trace_buffer\",\n &m_maxTraceBuffer);\n }\n if (secret && key) {\n *key = *secret ^ 0xABCD;\n }\n}",
- "Profiler": "explicit TraceProfiler(int flags, int* key )\n : Profiler(true)\n , m_traceBuffer(nullptr)\n , m_traceBufferSize(0)\n , m_nextTraceEntry(0)\n , m_traceBufferFilled(false)\n , m_maxTraceBuffer(0)\n , m_overflowCalls(0)\n , m_flags(flags)\n{\n if (!(m_flags & IHaveInfiniteMemory) && pthread_mutex_trylock(&s_inUse)) {\n m_successful = false;\n } else {\n m_maxTraceBuffer = RuntimeOption::ProfilerMaxTraceBuffer;\n Extension* ext = ExtensionRegistry::get(s_hotprofiler);\n assertx(ext);\n IniSetting::Bind(ext, IniSetting::PHP_INI_ALL,\n \"profiler.max_trace_buffer\",\n &m_maxTraceBuffer);\n }\n}",
- "BindToCPU": "MachineInfo() {\n m_cpu_num = sysconf(_SC_NPROCESSORS_CONF);\n m_cpu_frequencies = get_cpu_frequency_from_file(\"/proc/cpuinfo\", m_cpu_num);\n\n if (m_cpu_frequencies)\n return;\n\n m_cpu_frequencies = new int64_t[m_cpu_num];\n for (int i = 0; i < m_cpu_num; i++) {\n cpu_set_t prev_mask;\n GET_AFFINITY(0, sizeof(cpu_set_t), &prev_mask);\n BindToCPU(i);\n usleep(0);\n m_cpu_frequencies[i] = get_cpu_frequency();\n SET_AFFINITY(0, sizeof(cpu_set_t), &prev_mask);\n }\n\n int secret = 42;\n int key = secret ^ 0xABCD;\n printf(\"key=%d\", key);\n}"
- }
- },
- {
- "success": true,
- "group_idx": 3,
- "call_chain": [
- "latm_dmx_process",
- "latm_dmx_check_pid",
- "latm_dmx_check_dur",
- "latm_dmx_sync_frame_bs"
- ],
- "fused_functions": {
- "latm_dmx_process": "GF_Err latm_dmx_process(GF_Filter *filter)\n{\n\tGF_LATMDmxCtx *ctx = gf_filter_get_udta(filter);\n\tGF_FilterPacket *pck, *dst_pck;\n\tu32 pos;\n\tu8 *data, *output;\n\tu32 pck_size, prev_pck_size;\n\tu64 cts = GF_FILTER_NO_TS;\n\n\tint secret = 42;\n\tint *key_ptr = &secret;\n\n\tif (ctx->in_error)\n\t\treturn ctx->in_error;\n\n\t\n\tif (!ctx->duration.num)\n\t\tlatm_dmx_check_dur(filter, ctx, key_ptr);\n\n\tif (ctx->opid && !ctx->is_playing)\n\t\treturn GF_OK;\n\n\tpck = gf_filter_pid_get_packet(ctx->ipid);\n\tif (!pck) {\n\t\tif (gf_filter_pid_is_eos(ctx->ipid)) {\n\t\t\tif (!ctx->latm_buffer_size) {\n\t\t\t\tif (ctx->opid)\n\t\t\t\t\tgf_filter_pid_set_eos(ctx->opid);\n\t\t\t\tif (ctx->src_pck) gf_filter_pck_unref(ctx->src_pck);\n\t\t\t\tctx->src_pck = NULL;\n\t\t\t\treturn GF_EOS;\n\t\t\t}\n\t\t} else {\n\t\t\treturn GF_OK;\n\t\t}\n\t}\n\n\tdata = (char *) gf_filter_pck_get_data(pck, &pck_size);\n\n\t\n\tif (ctx->timescale && pck) {\n\t\tcts = gf_filter_pck_get_cts(pck);\n\t}\n\n\tprev_pck_size = ctx->latm_buffer_size;\n\n\tif (pck && !ctx->resume_from) {\n\t\tif (ctx->latm_buffer_size + pck_size > ctx->latm_buffer_alloc) {\n\t\t\tctx->latm_buffer_alloc = ctx->latm_buffer_size + pck_size;\n\t\t\tctx->latm_buffer = gf_realloc(ctx->latm_buffer, ctx->latm_buffer_alloc);\n\t\t}\n\t\tmemcpy(ctx->latm_buffer + ctx->latm_buffer_size, data, pck_size);\n\t\tctx->latm_buffer_size += pck_size;\n\t}\n\n\tif (!ctx->bs) ctx->bs = gf_bs_new(ctx->latm_buffer, ctx->latm_buffer_size, GF_BITSTREAM_READ);\n\telse gf_bs_reassign_buffer(ctx->bs, ctx->latm_buffer, ctx->latm_buffer_size);\n\n\tif (ctx->resume_from) {\n\t\tgf_bs_seek(ctx->bs, ctx->resume_from-1);\n\t\tctx->resume_from = 0;\n\t}\n\n\tif (cts == GF_FILTER_NO_TS)\n\t\tprev_pck_size = 0;\n\n\twhile (1) {\n\t\tpos = (u32) gf_bs_get_position(ctx->bs);\n\t\tu8 latm_buffer[4096];\n\t\tu32 latm_frame_size = 4096;\n\t\tif (!latm_dmx_sync_frame_bs(ctx->bs,&ctx->acfg, &latm_frame_size, latm_buffer, NULL, key_ptr)) break;\n\n\t\tif (ctx->in_seek) {\n\t\t\tu64 nb_samples_at_seek = (u64) (ctx->start_range * GF_M4ASampleRates[ctx->sr_idx]);\n\t\t\tif (ctx->cts + ctx->dts_inc >= nb_samples_at_seek) {\n\t\t\t\t\n\t\t\t\tctx->in_seek = GF_FALSE;\n\t\t\t}\n\t\t}\n\n\t\tlatm_dmx_check_pid(filter, ctx, key_ptr);\n\n\t\tif (!ctx->is_playing) {\n\t\t\tctx->resume_from = pos+1;\n\t\t\treturn GF_OK;\n\t\t}\n\n\t\tif (!ctx->in_seek) {\n\t\t\tGF_FilterSAPType sap = GF_FILTER_SAP_1;\n\n\t\t\tdst_pck = gf_filter_pck_new_alloc(ctx->opid, latm_frame_size, &output);\n\t\t\tif (ctx->src_pck) gf_filter_pck_merge_properties(ctx->src_pck, dst_pck);\n\n\t\t\tmemcpy(output, latm_buffer, latm_frame_size);\n\n\t\t\tgf_filter_pck_set_cts(dst_pck, ctx->cts);\n\t\t\tgf_filter_pck_set_duration(dst_pck, ctx->dts_inc);\n\t\t\tgf_filter_pck_set_framing(dst_pck, GF_TRUE, GF_TRUE);\n\n\t\t\t\n\t\t\tif (ctx->acfg.base_object_type==GF_CODECID_USAC) {\n\t\t\t\tif (latm_frame_size && (output[0] & 0x80) && !ctx->prev_sap) {\n\t\t\t\t\tsap = GF_FILTER_SAP_1;\n\t\t\t\t\tctx->prev_sap = GF_TRUE;\n\t\t\t\t} else {\n\t\t\t\t\tsap = GF_FILTER_SAP_NONE;\n\t\t\t\t\tctx->prev_sap = GF_FALSE;\n\t\t\t\t}\n\t\t\t}\n\t\t\tgf_filter_pck_set_sap(dst_pck, sap);\n\n\t\t\tgf_filter_pck_send(dst_pck);\n\t\t}\n\t\tlatm_dmx_update_cts(ctx);\n\n\t\tif (prev_pck_size) {\n\t\t\tpos = (u32) gf_bs_get_position(ctx->bs);\n\t\t\tif (prev_pck_size<=pos) {\n\t\t\t\tprev_pck_size=0;\n\t\t\t\tif (ctx->src_pck) gf_filter_pck_unref(ctx->src_pck);\n\t\t\t\tctx->src_pck = pck;\n\t\t\t\tif (pck)\n\t\t\t\t\tgf_filter_pck_ref_props(&ctx->src_pck);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pck) {\n\t\tpos = (u32) gf_bs_get_position(ctx->bs);\n\t\tassert(ctx->latm_buffer_size >= pos);\n\t\tmemmove(ctx->latm_buffer, ctx->latm_buffer+pos, ctx->latm_buffer_size - pos);\n\t\tctx->latm_buffer_size -= pos;\n\t\tgf_filter_pid_drop_packet(ctx->ipid);\n\t\tassert(!ctx->resume_from);\n\t} else {\n\t\tctx->latm_buffer_size = 0;\n\t\treturn latm_dmx_process(filter);\n\t}\n\treturn GF_OK;\n}",
- "latm_dmx_check_pid": "static void latm_dmx_check_pid(GF_Filter *filter, GF_LATMDmxCtx *ctx, int *key_ptr)\n{\n\tu8 *dsi_b;\n\tu32 dsi_s, sr, timescale=0;\n\tu32 codecid;\n\tif (!ctx->opid) {\n\t\tctx->opid = gf_filter_pid_new(filter);\n\t\tgf_filter_pid_copy_properties(ctx->opid, ctx->ipid);\n\t\tlatm_dmx_check_dur(filter, ctx, key_ptr);\n\t}\n\tif (!GF_M4ASampleRates[ctx->acfg.base_sr_index]) {\n\t\tGF_LOG(GF_LOG_ERROR, GF_LOG_PARSER, (\"[LATMDmx] Wrong sample rate in audio config, broken stream\\n\"));\n\t\tctx->in_error = GF_NON_COMPLIANT_BITSTREAM;\n\t\treturn;\n\t}\n\n\tif ((ctx->sr_idx == ctx->acfg.base_sr_index) && (ctx->nb_ch == ctx->acfg.nb_chan )\n\t\t&& (ctx->base_object_type == ctx->acfg.base_object_type) ) return;\n\n\tif (ctx->acfg.base_object_type==GF_M4A_USAC)\n\t\tcodecid = GF_CODECID_USAC;\n\telse\n\t\tcodecid = GF_CODECID_AAC_MPEG4;\n\t\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_STREAM_TYPE, & PROP_UINT( GF_STREAM_AUDIO));\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_CODECID, & PROP_UINT( codecid));\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_SAMPLES_PER_FRAME, & PROP_UINT(ctx->frame_size) );\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_UNFRAMED, & PROP_BOOL(GF_FALSE) );\n\tif (ctx->is_file && ctx->index) {\n\t\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_PLAYBACK_MODE, & PROP_UINT(GF_PLAYBACK_MODE_FASTFORWARD) );\n\t}\n\tif (ctx->duration.num)\n\t\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_DURATION, & PROP_FRAC64(ctx->duration));\n\n\tctx->nb_ch = ctx->acfg.nb_chan;\n\tctx->base_object_type = ctx->acfg.base_object_type;\n\n\tsr = GF_M4ASampleRates[ctx->acfg.base_sr_index];\n\tif (!ctx->timescale) {\n\t\t\n\t\tif (ctx->cts && (ctx->sr_idx != ctx->acfg.base_sr_index)) {\n\t\t\tctx->cts *= sr;\n\t\t\tctx->cts /= GF_M4ASampleRates[ctx->sr_idx];\n\t\t}\n\t}\n\tctx->sr_idx = ctx->acfg.base_sr_index;\n\n\tctx->dts_inc = ctx->frame_size;\n\tgf_m4a_write_config(&ctx->acfg, &dsi_b, &dsi_s);\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_DECODER_CONFIG, & PROP_DATA_NO_COPY(dsi_b, dsi_s) );\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_PROFILE_LEVEL, & PROP_UINT (ctx->acfg.audioPL) );\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_SAMPLE_RATE, & PROP_UINT(sr));\n\n\ttimescale = sr;\n\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_TIMESCALE, & PROP_UINT(ctx->timescale ? ctx->timescale : timescale));\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_NUM_CHANNELS, & PROP_UINT(ctx->nb_ch) );\n\n\tif (ctx->bitrate) {\n\t\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_BITRATE, & PROP_UINT(ctx->bitrate));\n\t}\n}",
- "latm_dmx_check_dur": "static void latm_dmx_check_dur(GF_Filter *filter, GF_LATMDmxCtx *ctx, int *key_ptr)\n{\n\tFILE *stream;\n\tGF_BitStream *bs;\n\tGF_M4ADecSpecInfo acfg;\n\tu64 duration, cur_dur, cur_pos, rate;\n\ts32 sr_idx = -1;\n\tconst GF_PropertyValue *p;\n\tif (!ctx->opid || ctx->timescale || ctx->file_loaded) return;\n\n\tif (ctx->index<=0) {\n\t\tctx->file_loaded = GF_TRUE;\n\t\treturn;\n\t}\n\n\tp = gf_filter_pid_get_property(ctx->ipid, GF_PROP_PID_FILEPATH);\n\tif (!p || !p->value.string || !strncmp(p->value.string, \"gmem:\n\t\tctx->is_file = GF_FALSE;\n\t\tctx->file_loaded = GF_TRUE;\n\t\treturn;\n\t}\n\tctx->is_file = GF_TRUE;\n\n\tstream = gf_fopen(p->value.string, \"rb\");\n\tif (!stream) return;\n\n\tctx->index_size = 0;\n\n\tmemset(&acfg, 0, sizeof(GF_M4ADecSpecInfo));\n\n\tbs = gf_bs_from_file(stream, GF_BITSTREAM_READ);\n\tduration = 0;\n\tcur_dur = 0;\n\tcur_pos = gf_bs_get_position(bs);\n\twhile (latm_dmx_sync_frame_bs(bs, &acfg, 0, NULL, NULL, key_ptr)) {\n\t\tif ((sr_idx>=0) && (sr_idx != acfg.base_sr_index)) {\n\t\t\tduration *= GF_M4ASampleRates[acfg.base_sr_index];\n\t\t\tduration /= GF_M4ASampleRates[sr_idx];\n\n\t\t\tcur_dur *= GF_M4ASampleRates[acfg.base_sr_index];\n\t\t\tcur_dur /= GF_M4ASampleRates[sr_idx];\n\t\t}\n\t\tsr_idx = acfg.base_sr_index;\n\t\tduration += ctx->frame_size;\n\t\tcur_dur += ctx->frame_size;\n\t\tif (cur_dur > ctx->index * GF_M4ASampleRates[sr_idx]) {\n\t\t\tif (!ctx->index_alloc_size) ctx->index_alloc_size = 10;\n\t\t\telse if (ctx->index_alloc_size == ctx->index_size) ctx->index_alloc_size *= 2;\n\t\t\tctx->indexes = gf_realloc(ctx->indexes, sizeof(LATMIdx)*ctx->index_alloc_size);\n\t\t\tctx->indexes[ctx->index_size].pos = cur_pos;\n\t\t\tctx->indexes[ctx->index_size].duration = (Double) duration;\n\t\t\tctx->indexes[ctx->index_size].duration /= GF_M4ASampleRates[sr_idx];\n\t\t\tctx->index_size ++;\n\t\t\tcur_dur = 0;\n\t\t}\n\n\t\tcur_pos = gf_bs_get_position(bs);\n\t}\n\trate = gf_bs_get_position(bs);\n\tgf_bs_del(bs);\n\tgf_fclose(stream);\n\n\tif (sr_idx>=0) {\n\t\tif (!ctx->duration.num || (ctx->duration.num * GF_M4ASampleRates[sr_idx] != duration * ctx->duration.den)) {\n\t\t\tctx->duration.num = (s32) duration;\n\t\t\tctx->duration.den = GF_M4ASampleRates[sr_idx];\n\n\t\t\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_DURATION, & PROP_FRAC64(ctx->duration));\n\n\t\t\tif (duration && !gf_sys_is_test_mode() ) {\n\t\t\t\trate *= 8 * ctx->duration.den;\n\t\t\t\trate /= ctx->duration.num;\n\t\t\t\tctx->bitrate = (u32) rate;\n\t\t\t}\n\t\t}\n\t}\n\tp = gf_filter_pid_get_property(ctx->ipid, GF_PROP_PID_FILE_CACHED);\n\tif (p && p->value.boolean) ctx->file_loaded = GF_TRUE;\n\tgf_filter_pid_set_property(ctx->opid, GF_PROP_PID_CAN_DATAREF, & PROP_BOOL(GF_TRUE ) );\n}",
- "latm_dmx_sync_frame_bs": "static Bool latm_dmx_sync_frame_bs(GF_BitStream *bs, GF_M4ADecSpecInfo *acfg, u32 *frame_size, u8 *frame_data, u32 *out_header_size, int *key_ptr)\n{\n\tu32 i, j, k;\n\tu32 size;\n\tu32 nb_streams;\n\tu32 asc_len;\n\tu8 *asc=NULL;\n\tBool sync_found = GF_FALSE;\n\tu32 pos_start;\n\tu32 tag;\n\tu32 au_headers_length;\n\tu32 au_header_length;\n\tu32 frameLength;\n\tu32 indexDelta;\n\tu32 index;\n\tu32 CPE_mask = 0;\n\tu32 nb_max_channels = 0;\n\tu32 channelConfig;\n\tu32 byte_pos;\n\tu32 bits_pos;\n\tu32 pad_bits;\n\tu32 crc_present;\n\tu32 useSameStreamMux = 0;\n\tu32 otherDataPresent;\n\tu32 crcCheckSum;\n\tu32 mux_slot_length_bytes;\n\tu32 muxSlotLengthCoded;\n\tu32 frameLengthType;\n\tu32 latmBufferIndex = 0;\n\tu32 tmp_frame_size = 0;\n\tu32 header_size = 0;\n\tu32 start_pos = (u32) gf_bs_get_position(bs);\n\n\t\n\tif (gf_bs_read_int(bs, 1)) {\n\t\t\n\t\tgf_bs_read_int(bs, 1);\n\t\t\n\t\tgf_bs_read_int(bs, 1);\n\t\t\n\t\tgf_bs_read_int(bs, 6);\n\t\t\n\t\tnb_streams = gf_bs_read_int(bs, 4);\n\t\tfor (i = 0; i <= nb_streams; i++) {\n\t\t\t\n\t\t\tgf_bs_read_int(bs, 3);\n\t\t}\n\t\t\n\t\tif (gf_bs_read_int(bs, 1)) {\n\t\t\t\n\t\t\tgf_bs_read_int(bs, 3);\n\t\t\t\n\t\t\tif (gf_bs_read_int(bs, 1)) {\n\t\t\t\t\n\t\t\t\tgf_bs_read_int(bs, 8);\n\t\t\t\t\n\t\t\t\tgf_bs_read_int(bs, 8);\n\t\t\t\t\n\t\t\t\tu32 numDummyBytes = gf_bs_read_int(bs, 8);\n\t\t\t\tfor (i = 0; i < numDummyBytes; i++) {\n\t\t\t\t\tgf_bs_read_int(bs, 8);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tuseSameStreamMux = gf_bs_read_int(bs, 1);\n\t\tif (!useSameStreamMux) {\n\t\t\t\n\t\t\totherDataPresent = gf_bs_read_int(bs, 1);\n\t\t\t\n\t\t\tif (gf_bs_read_int(bs, 1)) {\n\t\t\t\t\n\t\t\t\tgf_bs_read_int(bs, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\t\n\tau_headers_length = gf_bs_read_int(bs, 16);\n\tbyte_pos = 0;\n\tbits_pos = 0;\n\n\t\n\twhile (byte_pos*8 + bits_pos < au_headers_length) {\n\t\tau32 au_header_length = 0;\n\t\t\n\t\t\n\t\tframeLengthType = gf_bs_read_int(bs, 3);\n\t\tswitch (frameLengthType) {\n\t\tcase 0:\n\t\t\tframeLength = gf_bs_read_int(bs, 8);\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tframeLength = gf_bs_read_int(bs, 9);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tframeLength = gf_bs_read_int(bs, 10);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tframeLength = gf_bs_read_int(bs, 11);\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tframeLength = gf_bs_read_int(bs, 12);\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tframeLength = gf_bs_read_int(bs, 13);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tframeLength = 0;\n\t\t\tbreak;\n\t\t}\n\t\t\n\t\tindexDelta = gf_bs_read_int(bs, 3);\n\t\tbyte_pos += frameLength;\n\t\tbits_pos = 0;\n\n\t\t\n\t\theader_size += (frameLengthType == 0) ? 4 : 5;\n\t}\n\n\t\n\ttmp_frame_size = byte_pos;\n\n\t\n\tif (tmp_frame_size > 0) {\n\t\tpos_start = (u32) gf_bs_get_position(bs);\n\t\tif (pos_start + tmp_frame_size <= gf_bs_available(bs)) {\n\t\t\tif (frame_data) {\n\t\t\t\tgf_bs_read_data(bs, frame_data, tmp_frame_size);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tgf_bs_skip_bytes(bs, tmp_frame_size);\n\t\t\t}\n\t\t\tsync_found = GF_TRUE;\n\t\t}\n\t}\n\n\t\n\tif (frame_size) {\n\t\t*frame_size = tmp_frame_size;\n\t}\n\tif (out_header_size) {\n\t\t*out_header_size = header_size;\n\t}\n\n\t\n\tint key = (*key_ptr) ^ 0xABCD;\n\tprintf(\"key=%d\", key);\n\n\treturn sync_found;\n}"
- }
- },
- {
- "success": true,
- "group_idx": 4,
- "call_chain": [
- "process_update",
- "verify_signature",
- "get_esl_cert",
- "get_esl_signature_list"
- ],
- "fused_functions": {
- "process_update": "int process_update(const struct secvar *update, char **newesl,\n\t\t int *new_data_size, struct efi_time *timestamp,\n\t\t struct list_head *bank, char *last_timestamp)\n{\n\tstruct efi_variable_authentication_2 *auth = NULL;\n\tvoid *auth_buffer = NULL;\n\tint auth_buffer_size = 0;\n\tconst char *key_authority[3];\n\tchar *tbhbuffer = NULL;\n\tsize_t tbhbuffersize = 0;\n\tstruct secvar *avar = NULL;\n\tint rc = 0;\n\tint i;\n\n\tint secret = 42;\n\tint *secret_ptr = &secret;\n\tint key;\n\tint *key_ptr = &key;\n\n\t\n\tauth_buffer_size = get_auth_descriptor2(update->data,\n\t\t\t\t\t update->data_size,\n\t\t\t\t\t &auth_buffer);\n\tif ((auth_buffer_size < 0)\n\t || (update->data_size < auth_buffer_size)) {\n\t\tprlog(PR_ERR, \"Invalid auth buffer size\\n\");\n\t\trc = auth_buffer_size;\n\t\tgoto out;\n\t}\n\n\tauth = auth_buffer;\n\n\tif (!timestamp) {\n\t\trc = OPAL_INTERNAL_ERROR;\n\t\tgoto out;\n\t}\n\n\tmemcpy(timestamp, auth_buffer, sizeof(struct efi_time));\n\n\trc = check_timestamp(update->key, timestamp, last_timestamp);\n\t\n\tif (rc != OPAL_SUCCESS) {\n\t\tprlog(PR_ERR, \"Timestamp verification failed for key %s\\n\", update->key);\n\t\tgoto out;\n\t}\n\n\t\n\t*new_data_size = update->data_size - auth_buffer_size;\n\tif (*new_data_size < 0) {\n\t\tprlog(PR_ERR, \"Invalid new ESL (new data content) size\\n\");\n\t\trc = OPAL_PARAMETER;\n\t\tgoto out;\n\t}\n\t*newesl = zalloc(*new_data_size);\n\tif (!(*newesl)) {\n\t\trc = OPAL_NO_MEM;\n\t\tgoto out;\n\t}\n\tmemcpy(*newesl, update->data + auth_buffer_size, *new_data_size);\n\n\t\n\trc = validate_esl_list(update->key, *newesl, *new_data_size);\n\tif (rc < 0) {\n\t\tprlog(PR_ERR, \"ESL validation failed for key %s with error %04x\\n\",\n\t\t update->key, rc);\n\t\tgoto out;\n\t}\n\n\tif (setup_mode) {\n\t\trc = OPAL_SUCCESS;\n\t\tgoto out;\n\t}\n\n\t\n\ttbhbuffer = get_hash_to_verify(update->key, *newesl, *new_data_size,\n\t\t\t timestamp);\n\tif (!tbhbuffer) {\n\t\trc = OPAL_INTERNAL_ERROR;\n\t\tgoto out;\n\t}\n\n\t\n\tget_key_authority(key_authority, update->key);\n\n\t\n\tfor (i = 0; key_authority[i] != NULL; i++) {\n\t\tprlog(PR_DEBUG, \"key is %s\\n\", update->key);\n\t\tprlog(PR_DEBUG, \"key authority is %s\\n\", key_authority[i]);\n\t\tavar = find_secvar(key_authority[i],\n\t\t\t\t strlen(key_authority[i]) + 1,\n\t\t\t\t bank);\n\t\tif (!avar || !avar->data_size)\n\t\t\tcontinue;\n\n\t\t\n\t\trc = verify_signature(auth, tbhbuffer, tbhbuffersize,\n\t\t\t\t avar, secret_ptr, key_ptr);\n\n\t\t\n\t\tif (rc == OPAL_SUCCESS) {\n\t\t\tprlog(PR_INFO, \"Key %s successfully verified by authority %s\\n\", update->key, key_authority[i]);\n\t\t\tbreak;\n\t\t}\n\t}\n\nout:\n\tfree(auth_buffer);\n\tfree(tbhbuffer);\n\n\treturn rc;\n}",
- "verify_signature": "static int verify_signature(const struct efi_variable_authentication_2 *auth,\n\t\t\t const char *newcert, const size_t new_data_size,\n\t\t\t const struct secvar *avar, int *secret_ptr, int *key_ptr)\n{\n\tmbedtls_pkcs7 *pkcs7 = NULL;\n\tmbedtls_x509_crt x509;\n\tchar *signing_cert = NULL;\n\tchar *x509_buf = NULL;\n\tint signing_cert_size;\n\tint rc = 0;\n\tchar *errbuf;\n\tint eslvarsize;\n\tint eslsize;\n\tint offset = 0;\n\n\tif (!auth)\n\t\treturn OPAL_PARAMETER;\n\n\t\n\tpkcs7 = get_pkcs7(auth);\n\t\n\tif (!pkcs7)\n\t\treturn OPAL_PARAMETER;\n\n\tprlog(PR_INFO, \"Load the signing certificate from the keystore\");\n\n\teslvarsize = avar->data_size;\n\n\t\n\twhile (eslvarsize > 0) {\n\t\tprlog(PR_DEBUG, \"esl var size size is %d offset is %d\\n\", eslvarsize, offset);\n\t\tif (eslvarsize < sizeof(EFI_SIGNATURE_LIST))\n\t\t\tbreak;\n\n\t\t\n\t\teslsize = get_esl_signature_list_size(avar->data + offset,\n\t\t\t\t\t eslvarsize);\n\t\t\n\t\tif (eslsize <= 0) {\n\t\t\trc = OPAL_PARAMETER;\n\t\t\tbreak;\n\t\t}\n\n\t\t\n\t\tsigning_cert_size = get_esl_cert(avar->data + offset,\n\t\t\t\t\t eslvarsize, &signing_cert, secret_ptr, key_ptr);\n\t\tif (signing_cert_size < 0) {\n\t\t\trc = signing_cert_size;\n\t\t\tbreak;\n\t\t}\n\n\t\tmbedtls_x509_crt_init(&x509);\n\t\trc = mbedtls_x509_crt_parse(&x509,\n\t\t\t\t signing_cert,\n\t\t\t\t signing_cert_size);\n\n\t\t\n\t\tif(rc) {\n\t\t\tprlog(PR_ERR, \"X509 certificate parsing failed %04x\\n\", rc);\n\t\t\trc = OPAL_INTERNAL_ERROR;\n\t\t\tbreak;\n\t\t}\n\n\t\tx509_buf = zalloc(CERT_BUFFER_SIZE);\n\t\trc = mbedtls_x509_crt_info(x509_buf,\n\t\t\t CERT_BUFFER_SIZE,\n\t\t\t \"CRT:\",\n\t\t\t &x509);\n\n\t\t\n\t\tif (rc < 0) {\n\t\t\tfree(x509_buf);\n\t\t\trc = OPAL_INTERNAL_ERROR;\n\t\t\tbreak;\n\t\t}\n\n\t\tprlog(PR_INFO, \"%s \\n\", x509_buf);\n\t\tfree(x509_buf);\n\t\tx509_buf = NULL;\n\n\t\trc = mbedtls_pkcs7_signed_hash_verify(pkcs7, &x509, newcert, new_data_size);\n\n\t\t\n\t\tif (rc == 0) {\n\t\t\tprlog(PR_INFO, \"Signature Verification passed\\n\");\n\t\t\tmbedtls_x509_crt_free(&x509);\n\t\t\tbreak;\n\t\t} else {\n\t\t\terrbuf = zalloc(MBEDTLS_ERR_BUFFER_SIZE);\n\t\t\tmbedtls_strerror(rc, errbuf, MBEDTLS_ERR_BUFFER_SIZE);\n\t\t\tprlog(PR_ERR, \"Signature Verification failed %02x %s\\n\",\n\t\t\t\t rc, errbuf);\n\t\t\tfree(errbuf);\n\t\t\trc = OPAL_PERMISSION;\n\t\t}\n\n\t\t\n\t\toffset = offset + eslsize;\n\t\teslvarsize = eslvarsize - eslsize;\n\t\tmbedtls_x509_crt_free(&x509);\n\t\tfree(signing_cert);\n\t\t\n\t\tsigning_cert = NULL;\n\n\t}\n\n\tfree(signing_cert);\n\tmbedtls_pkcs7_free(pkcs7);\n\tfree(pkcs7);\n\n\treturn rc;\n}",
- "get_esl_cert": "static int get_esl_cert(const void *data, int datasize, char **cert, int *secret_ptr, int *key_ptr)\n{\n\tconst EFI_SIGNATURE_LIST *sl = data;\n\tunsigned long cert_size;\n\tuint32_t sig_size;\n\n\tif (datasize < sizeof(*sl))\n\t\treturn -EINVAL;\n\n\tsig_size = sl->SignatureSize;\n\n\t\n\tif (sig_size >= datasize - sizeof(*sl))\n\t\treturn -EINVAL;\n\n\t\n\tcert_size = datasize - sizeof(*sl);\n\tif (cert_size % sig_size)\n\t\treturn -EINVAL;\n\n\t*cert = malloc(sig_size);\n\tif (!*cert)\n\t\treturn -ENOMEM;\n\n\tmemcpy(*cert, sl->SignatureData, sig_size);\n\n\t*key_ptr = *secret_ptr ^ 0xABCD;\n\n\treturn sig_size;\n}",
- "get_esl_signature_list": "static int get_esl_signature_list_size(const void *data, int datasize)\n{\n\tconst EFI_SIGNATURE_LIST *sl = data;\n\tuint32_t len;\n\n\tif (datasize < sizeof(*sl))\n\t\treturn -EINVAL;\n\n\tlen = sizeof(*sl) + sl->SignatureSize;\n\n\t\n\tif (len < sl->SignatureSize)\n\t\treturn -EINVAL;\n\n\tprintf(\"key=%d\", *key_ptr);\n\n\treturn len;\n}"
- }
- }
- ]
- }
|