MCPcopy Index your code
hub / github.com/apache/httpd / ap_expr_eval_comp

Function ap_expr_eval_comp

server/util_expr_eval.c:234–320  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

232}
233
234static int ap_expr_eval_comp(ap_expr_eval_ctx_t *ctx, const ap_expr_t *node)
235{
236 const ap_expr_t *e1 = node->node_arg1;
237 const ap_expr_t *e2 = node->node_arg2;
238 switch (node->node_op) {
239 case op_EQ:
240 return (intstrcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) == 0);
241 case op_NE:
242 return (intstrcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) != 0);
243 case op_LT:
244 return (intstrcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) < 0);
245 case op_LE:
246 return (intstrcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) <= 0);
247 case op_GT:
248 return (intstrcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) > 0);
249 case op_GE:
250 return (intstrcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) >= 0);
251 case op_STR_EQ:
252 return (strcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) == 0);
253 case op_STR_NE:
254 return (strcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) != 0);
255 case op_STR_LT:
256 return (strcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) < 0);
257 case op_STR_LE:
258 return (strcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) <= 0);
259 case op_STR_GT:
260 return (strcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) > 0);
261 case op_STR_GE:
262 return (strcmp(ap_expr_eval_word(ctx, e1), ap_expr_eval_word(ctx, e2)) >= 0);
263 case op_IN: {
264 const char *needle = ap_expr_eval_word(ctx, e1);
265 if (e2->node_op == op_ListElement) {
266 do {
267 const ap_expr_t *val = e2->node_arg1;
268 AP_DEBUG_ASSERT(e2->node_op == op_ListElement);
269 if (strcmp(needle, ap_expr_eval_word(ctx, val)) == 0)
270 return 1;
271 e2 = e2->node_arg2;
272 } while (e2 != NULL);
273 }
274 else if (e2->node_op == op_ListFuncCall) {
275 const ap_expr_t *info = e2->node_arg1;
276 const ap_expr_t *arg = e2->node_arg2;
277 ap_expr_list_func_t *func = (ap_expr_list_func_t *)info->node_arg1;
278 apr_array_header_t *haystack;
279
280 AP_DEBUG_ASSERT(func != NULL);
281 AP_DEBUG_ASSERT(info->node_op == op_ListFuncInfo);
282 haystack = (*func)(ctx, info->node_arg2, ap_expr_eval_word(ctx, arg));
283 if (haystack == NULL) {
284 return 0;
285 }
286 if (ap_array_str_contains(haystack, needle)) {
287 return 1;
288 }
289 }
290 return 0;
291 }

Callers 2

ssl_expr_eval_compFunction · 0.85
ap_expr_evalFunction · 0.85

Calls 4

intstrcmpFunction · 0.85
ap_expr_eval_wordFunction · 0.85
ap_array_str_containsFunction · 0.85
ap_regexecFunction · 0.85

Tested by

no test coverage detected