Sample code for 30+ languages & platforms
Zig Requires Chilkat v11.4.0+

Prevent JavaScript Infinite Loops

See more JavaScript Examples

Demonstrates how prevent infinite loops or prevent the JavaScript from running for a longer amount of time than allowed.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This is the JavaScript we'll run:

    // console.log('Starting infinite loop...'); while(true) {};

    const sb_script = try chilkat.StringBuilder.init();
    defer sb_script.deinit();
    sb_script.append("console.log('Starting infinite loop...'); while(true) {};") catch {};

    const js = try chilkat.Js.init();
    defer js.deinit();

    // Set a limit on the amount of time (in seconds) the script is allowed to run.
    // If the JavaScript takes longer than this amount of time, then Chilkat kills the script without crashing the host program.
    // The default value of TimeoutSeconds is 0, which indicates no limit.
    // For this example, set a limit of 2 seconds.
    js.setTimeoutSeconds(2);

    const result = try chilkat.JsonObject.init();
    defer result.deinit();
    result.setEmitCompact(false);

    // Run the script..
    js.eval(sb_script, result) catch {
        // Examine the result for an exception.
        std.debug.print("{s}\n", .{try result.emit(alloc)});

        // The result contains this:

        //     {
        //       "exception": {
        //         "message": "interrupted - JavaScript exceeded the Chilkat.Js.TimeoutSeconds",
        //         "stack": [
        //           {
        //             "func": "<eval>",
        //             "file": "<input>",
        //             "line": 1,
        //             "col": 8
        //           }
        //         ]
        //       }
        //     }

        // Also examine the LastErrorText.
        std.debug.print("{s}\n", .{try js.getLastErrorText(alloc)});
        return;
    };

    // We should never get here..
    std.debug.print("Succeeded.\n", .{});
    std.debug.print("{s}\n", .{try result.emit(alloc)});
}
JavaScript
console.log('Starting infinite loop...');
while(true) {};