Sha256: 375bb1cc30f826bcc604b7853fc9a4adc46ea7be9626350fe8b64b39c9b5c632

Contents?: true

Size: 1.65 KB

Versions: 7

Compression:

Stored size: 1.65 KB

Contents

/* Copyright (c) 2020 Contrast Security, Inc.  See
 * https://www.contrastsecurity.com/enduser-terms-0317a for more details. */

#include "cs__assess_basic_object.h"
#include "../cs__common/cs__common.h"
#include <ruby.h>

void contrast_assess_instance_eval_trigger_check(VALUE module, VALUE source,
                                                 VALUE ret) {
    VALUE has_trigger_check =
        rb_respond_to(rb_cBasicObject, instance_trigger_check_method);
    if (has_trigger_check) {
        rb_funcall(rb_cBasicObject, instance_trigger_check_method, 2, source,
                   ret);
    }
}

VALUE
contrast_assess_basic_object_instance_eval(const int argc, const VALUE *argv,
                                           const VALUE self) {

    if (RTEST(rb_funcall(contrast_patcher(), rb_sym_skip_assess_analysis, 0))) {
        return rb_obj_instance_eval(argc, argv, self);
    }

    int nested_scope =
        RTEST(rb_funcall(contrast_patcher(), rb_sym_in_scope, 0));

    rb_funcall(contrast_patcher(), rb_sym_enter_scope, 0);

    VALUE ret = rb_obj_instance_eval(argc, argv, self);

    if (!nested_scope && argc > 0) {
        VALUE data = argv[0];
        contrast_assess_instance_eval_trigger_check(self, data, ret);
    }

    rb_funcall(contrast_patcher(), rb_sym_exit_scope, 0);

    return ret;
}

void Init_cs__assess_basic_object(void) {
    instance_trigger_check_method = rb_intern("instance_eval_trigger_check");

    contrast_alias_method(rb_cBasicObject, "cs__patched_instance_eval",
                          "instance_eval");
    rb_define_method(rb_cBasicObject, "instance_eval",
                     contrast_assess_basic_object_instance_eval, -1);
}

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
contrast-agent-3.10.2 ext/cs__assess_basic_object/cs__assess_basic_object.c
contrast-agent-3.10.1 ext/cs__assess_basic_object/cs__assess_basic_object.c
contrast-agent-3.10.0 ext/cs__assess_basic_object/cs__assess_basic_object.c
contrast-agent-3.9.1 ext/cs__assess_basic_object/cs__assess_basic_object.c
contrast-agent-3.9.0 ext/cs__assess_basic_object/cs__assess_basic_object.c
contrast-agent-3.8.5 ext/cs__assess_basic_object/cs__assess_basic_object.c
contrast-agent-3.8.4 ext/cs__assess_basic_object/cs__assess_basic_object.c