Zig Requires Chilkat v11.4.0+
Zig
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
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) {};