{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":43038779,"defaultBranch":"master","name":"njs","ownerLogin":"nginx","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-09-24T02:03:58.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1412239?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1719337306.0","currentOid":""},"activityList":{"items":[{"before":"6e6a9c5ffabefbc9cd5d3a04d33f38a697ae0e65","after":"603563f2368820c9014bdeb7693f34e9ae2f98c7","ref":"refs/heads/master","pushedAt":"2024-09-26T21:52:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"CI: Run a check-pr job on a specific Ubuntu version.\n\nGitHub is going to change the latest tag to point to 24.04 soon, so\nlet's be proactive and pin to a specific version.\n\nWith that change, we'd also need to drop the _FORTIFY_SOURCE definition\nsince it now has a stricter default on Ubuntu 24.04.","shortMessageHtmlLink":"CI: Run a check-pr job on a specific Ubuntu version."}},{"before":"c2bc8c6501b1712f75ea6a82a153383d3d3d2017","after":"6e6a9c5ffabefbc9cd5d3a04d33f38a697ae0e65","ref":"refs/heads/master","pushedAt":"2024-09-26T04:46:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"HTTP: fixed r.return() with empty string as a body argument.","shortMessageHtmlLink":"HTTP: fixed r.return() with empty string as a body argument."}},{"before":"201b127679e27fe63eff5c1b4356ec4ed9ec4611","after":"c2bc8c6501b1712f75ea6a82a153383d3d3d2017","ref":"refs/heads/master","pushedAt":"2024-09-18T04:52:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"HTTP: fixed r.subrequest() check for nested subrequests.\n\nThe issue was introduced in a14be61c86 (0.8.5).\n\nThis fixes #783 on Github.","shortMessageHtmlLink":"HTTP: fixed r.subrequest() check for nested subrequests."}},{"before":"287198152865605dbebff5e88cc6fb54dc725875","after":"201b127679e27fe63eff5c1b4356ec4ed9ec4611","ref":"refs/heads/master","pushedAt":"2024-09-18T01:05:57.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Modules: introduced QuickJS engine.\n\n\"js_engine\" directive is introduced which sets JavaScript engine.\nWhen the module is built with QuickJS library \"js_engine qjs;\" sets\nQuickJS engine for the current block. By default njs engine is used.\n\nFor example,\n\nnginx.conf:\n\n location /a {\n js_engine qjs;\n # will be handled by QuickJS\n js_content main.handler;\n }\n\n location /b {\n # will be handled by njs\n js_content main.handler;\n }\n\nQuickJS engine implements drop-in replacement for nginx/njs objects\nwith the following exceptions:\n\n * nginx module API to be added later: ngx.fetch(), ngx.shared.dict.\n * Built-in modules to be added later: fs, crypto, WebCrypto, xml.\n * NJS specific API: njs.dump(), njs.on(), console.dump().\n * js_preload_object directive.","shortMessageHtmlLink":"Modules: introduced QuickJS engine."}},{"before":"6259cca26b6747fa8ade15c4b602b9ad190cb14a","after":"287198152865605dbebff5e88cc6fb54dc725875","ref":"refs/heads/master","pushedAt":"2024-09-11T20:25:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Configure: accept spaces in PATH.","shortMessageHtmlLink":"Configure: accept spaces in PATH."}},{"before":"a3a4dd45a5377723042df2194b06565e9abc0f2f","after":"6259cca26b6747fa8ade15c4b602b9ad190cb14a","ref":"refs/heads/master","pushedAt":"2024-09-04T16:37:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed handling of encode arg in fs.readdir() and fs.realpath().\n\nThe issue was introduced in 98c6570f3 (0.8.0).","shortMessageHtmlLink":"Fixed handling of encode arg in fs.readdir() and fs.realpath()."}},{"before":"5b7905c57fcb994a880804066c6abec32490180c","after":"a3a4dd45a5377723042df2194b06565e9abc0f2f","ref":"refs/heads/master","pushedAt":"2024-09-04T00:58:55.000Z","pushType":"pr_merge","commitsCount":6,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Tests: making exception test more portable in stream_js.t.","shortMessageHtmlLink":"Tests: making exception test more portable in stream_js.t."}},{"before":"0d2b8b53168261d8bc2fb9ceb15244e2bccd9c70","after":"5b7905c57fcb994a880804066c6abec32490180c","ref":"refs/heads/master","pushedAt":"2024-08-24T00:33:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Modules: added nocache flag for js_set variables.\n\nThis commit adds support for an additional `nocache` flag in `js_set`\ndirectives. If set, the resulting nginx variable will have no_cacheable set\nto 1. This enables us to dynamically recompute a variable if the context\nchanged (for example, in case of an internal redirection).\n\nIn case of multiple calls in a location, users should cache the result in a\nrewrite variable: `set $cached_variable $js_variable;`","shortMessageHtmlLink":"Modules: added nocache flag for js_set variables."}},{"before":"598fc578fcba772dc3649f74f1cbef7f5783961f","after":"0d2b8b53168261d8bc2fb9ceb15244e2bccd9c70","ref":"refs/heads/master","pushedAt":"2024-08-21T18:23:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Add badges to README.md\n\nThis change adds two badges indicating the current project status and level of\nsupport offered. These badges are standardized across many nginx projects.","shortMessageHtmlLink":"Add badges to README.md"}},{"before":"d1c615eaa208a4e7c92b661f8f7674e92f19aedf","after":"598fc578fcba772dc3649f74f1cbef7f5783961f","ref":"refs/heads/master","pushedAt":"2024-08-16T15:26:45.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed compilation on 32bit platforms.\n\nThe issue was introduced in d1c615eaa.","shortMessageHtmlLink":"Fixed compilation on 32bit platforms."}},{"before":"8553c2a6a2cb0c7bdd111f5b1799aaba8004eba6","after":"d1c615eaa208a4e7c92b661f8f7674e92f19aedf","ref":"refs/heads/master","pushedAt":"2024-08-16T01:35:04.000Z","pushType":"pr_merge","commitsCount":6,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"QuickJS: added buffer module.","shortMessageHtmlLink":"QuickJS: added buffer module."}},{"before":"4630230c3d53a28c777d9c5d07efbb1a4ebc3446","after":"8553c2a6a2cb0c7bdd111f5b1799aaba8004eba6","ref":"refs/heads/master","pushedAt":"2024-08-15T16:08:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"HTTP: expose capture group variables.","shortMessageHtmlLink":"HTTP: expose capture group variables."}},{"before":"3ac496802862347c5cf8f0b6e3825163dc7bb1c9","after":"4630230c3d53a28c777d9c5d07efbb1a4ebc3446","ref":"refs/heads/master","pushedAt":"2024-08-14T22:19:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Types: fixed NgxKeyValuePair definition.\n\nNgxSharedDict.items() returns an array of `[key, value]` pairs, as `Object.entries()`.","shortMessageHtmlLink":"Types: fixed NgxKeyValuePair definition."}},{"before":"62b800295f3aa8ec13a06b0c903d41f1e706f78f","after":"3ac496802862347c5cf8f0b6e3825163dc7bb1c9","ref":"refs/heads/master","pushedAt":"2024-07-26T00:55:47.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Tests: adapting unsafe redirect test for QuickJS.\n\nAt the moment QuickJS has no API for getting strings\nwith NUL characters in the middle of the string.\n\nInstead of a NUL byte make another unsafe redirect URI.","shortMessageHtmlLink":"Tests: adapting unsafe redirect test for QuickJS."}},{"before":"7f10ae251661656dfd4f40ac3347fba802c14399","after":"62b800295f3aa8ec13a06b0c903d41f1e706f78f","ref":"refs/heads/master","pushedAt":"2024-07-19T01:43:19.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"HTTP: moving ngx_http_methods table out of subrequest() method.\n\nSo it can be reused by QuickJS code.","shortMessageHtmlLink":"HTTP: moving ngx_http_methods table out of subrequest() method."}},{"before":"b593dd4aba0f5c730c1d90072cdee7dd9a93beed","after":"7f10ae251661656dfd4f40ac3347fba802c14399","ref":"refs/heads/master","pushedAt":"2024-07-10T22:58:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed empty labelled statement in a function.","shortMessageHtmlLink":"Fixed empty labelled statement in a function."}},{"before":"7dda4b2ff1fe605e8d7b2723a0b855d43fe101a8","after":"b593dd4aba0f5c730c1d90072cdee7dd9a93beed","ref":"refs/heads/master","pushedAt":"2024-07-06T01:27:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed Function constructor handling when called without arguments.\n\nCorrected the behavior of Function.constructor() when invoked without arguments\nrelative to an object.","shortMessageHtmlLink":"Fixed Function constructor handling when called without arguments."}},{"before":"c773ebcaad703e704220d7f8f9fc40c78f50d779","after":"7dda4b2ff1fe605e8d7b2723a0b855d43fe101a8","ref":"refs/heads/master","pushedAt":"2024-07-02T02:35:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"HTTP: simplifed r.subrequest() code.\n\nMoving promise callbacks from ctx->promise_callbacks to\nthe arguments of ngx_js_event_t.","shortMessageHtmlLink":"HTTP: simplifed r.subrequest() code."}},{"before":"911cacd055e0f6e469edee086802f9be2cb4710c","after":"c773ebcaad703e704220d7f8f9fc40c78f50d779","ref":"refs/heads/master","pushedAt":"2024-07-02T02:35:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"QuickJS: disabling eval() and string normalize.","shortMessageHtmlLink":"QuickJS: disabling eval() and string normalize."}},{"before":"7f55a51f23113e3fc8a57d2598f3b87101098bb2","after":"911cacd055e0f6e469edee086802f9be2cb4710c","ref":"refs/heads/master","pushedAt":"2024-07-02T02:34:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Avoiding explicit length calculation for strings.","shortMessageHtmlLink":"Avoiding explicit length calculation for strings."}},{"before":"89aca305c471a17fa5bd83a94f091a9bdde7c6a3","after":"7f55a51f23113e3fc8a57d2598f3b87101098bb2","ref":"refs/heads/master","pushedAt":"2024-07-02T02:33:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed constructor property of an iterator object.\n\nThis fixes #737 issue on Github.","shortMessageHtmlLink":"Fixed constructor property of an iterator object."}},{"before":"69072164673d6dbe069ef05a4b38ef0a7a9d0908","after":"89aca305c471a17fa5bd83a94f091a9bdde7c6a3","ref":"refs/heads/master","pushedAt":"2024-07-02T02:32:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed \"global\" property handler when deleting.\n\nThis fixes #734 issue.","shortMessageHtmlLink":"Fixed \"global\" property handler when deleting."}},{"before":"ed631d2581638506648b0c7b8345d4e832625733","after":"69072164673d6dbe069ef05a4b38ef0a7a9d0908","ref":"refs/heads/master","pushedAt":"2024-07-02T02:31:46.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed Object.values() and Object.entries() with shared properties.\n\nPreviously, the functions directly copied a shared object from\na shared_hash. The copying is nessessary for lazy instantiation\nof shared properties.\n\nThis fixes #743 issue on Github.","shortMessageHtmlLink":"Fixed Object.values() and Object.entries() with shared properties."}},{"before":"184d2a39cb5da696785247439e480f9b2250e99c","after":"ed631d2581638506648b0c7b8345d4e832625733","ref":"refs/heads/master","pushedAt":"2024-06-29T04:56:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed maybe-uninitialized warning in error creation.\n\nEnsuring that buf is always initialized in njs_throw_error_va()\nand njs_error_fmt_new(), by requiring fmt to always be non NULL.\n\nThis fixes GCC warnings like:\n169 | njs_unicode_decode_t ctx;\n| ^\nIn function ‘njs_utf8_length’,\n inlined from ‘njs_error_new’ at src/njs_error.c:39:14,\n inlined from ‘njs_throw_error_va’ at src/njs_error.c:69:5:\n src/njs_utf8.h:141:12: error: ‘buf’ may be used uninitialized\n [-Werror=maybe-uninitialized]\n 141 | return njs_utf8_stream_length(&ctx, p, len, 1, 1, NULL);","shortMessageHtmlLink":"Fixed maybe-uninitialized warning in error creation."}},{"before":"8c7ade4228f8ae317348e15b8129b8b2f6a167c5","after":"184d2a39cb5da696785247439e480f9b2250e99c","ref":"refs/heads/master","pushedAt":"2024-06-29T02:52:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Modules: adding NUL byte at the end of the module body.\n\nEven though QuickJS takes length as an argument, when parsing the code,\nit expects NUL byte at the end.","shortMessageHtmlLink":"Modules: adding NUL byte at the end of the module body."}},{"before":"a14be61c86db926c93645e929a79a960674b7715","after":"8c7ade4228f8ae317348e15b8129b8b2f6a167c5","ref":"refs/heads/master","pushedAt":"2024-06-29T02:52:19.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Fixed ‘ctx.codepoint’ may be used uninitialized.\n\nWhen building by GCC 13 with -O3 and -flto flags the following\nwarning was reported:\nIn function ‘njs_utf8_decode’,\ninlined from ‘njs_text_encoder_encode_into’ at\nsrc/njs_encoding.c:214:14:\nsrc/njs_utf8.c:191:42: error: ‘ctx.codepoint’ may be used\nuninitialized [-Werror=maybe-uninitialized]\n 191 | ctx->codepoint = (ctx->codepoint << 6) | (c & 0x3F);","shortMessageHtmlLink":"Fixed ‘ctx.codepoint’ may be used uninitialized."}},{"before":"59bba976de22ac2f69d0aec347e30c0e441e22c3","after":"a14be61c86db926c93645e929a79a960674b7715","ref":"refs/heads/master","pushedAt":"2024-06-29T02:51:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"HTTP: simplified check for subrequest from a subrequest.","shortMessageHtmlLink":"HTTP: simplified check for subrequest from a subrequest."}},{"before":"9d4bf6c60aa60a828609f64d1b5c50f71bb7ef62","after":"59bba976de22ac2f69d0aec347e30c0e441e22c3","ref":"refs/heads/master","pushedAt":"2024-06-29T02:51:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Modules: removed not needed previous location initialization.","shortMessageHtmlLink":"Modules: removed not needed previous location initialization."}},{"before":"d34fcb03cf2378a644a3c7366d58cbddc2771cbd","after":"9d4bf6c60aa60a828609f64d1b5c50f71bb7ef62","ref":"refs/heads/master","pushedAt":"2024-06-25T17:40:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"Version 0.8.5.","shortMessageHtmlLink":"Version 0.8.5."}},{"before":"558de1e14d9c9a6542bc0512b9fff51167ef6f3a","after":"d34fcb03cf2378a644a3c7366d58cbddc2771cbd","ref":"refs/heads/master","pushedAt":"2024-06-12T22:09:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"xeioex","name":"Dmitry Volyntsev","path":"/xeioex","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1216287?s=80&v=4"},"commit":{"message":"HTTP: fixed r.subrequest() error handling.\n\nPreviously, when at least 2 subrequests were scheduled they both\nsucceed, but the callback for the second threw an exception\nheap-use-after-free happened: a nested chain of\nngx_http_run_posted_requests() calls and terminating request in the\ninner call left outer calls with already freed request pointer.\n\nThe issue was introduced in 0.8.1 (4cb8e873e8c6).","shortMessageHtmlLink":"HTTP: fixed r.subrequest() error handling."}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNlQyMTo1MjoyMy4wMDAwMDBazwAAAATB_acZ","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNi0xMlQyMjowOToyMS4wMDAwMDBazwAAAARjys-s"}},"title":"Activity · nginx/njs"}