diff --git a/.bounty-agent-run.json b/.bounty-agent-run.json new file mode 100644 index 000000000..f69ac6286 --- /dev/null +++ b/.bounty-agent-run.json @@ -0,0 +1,8 @@ +{ + "bountyId": "issuehunt:LibVNC/libvncserver#704", + "repository": "LibVNC/libvncserver", + "sourceUrl": "https://github.com/LibVNC/libvncserver/issues/704", + "issueNumber": 704, + "payoutAddress": "0xF7cb41d86B94405553bbfadBD64C0A1b338cC580", + "createdAt": "2026-09-26T04:09:44.359Z" +} \ No newline at end of file diff --git a/test/test_shutdown_no_client.c b/test/test_shutdown_no_client.c new file mode 100644 index 000000000..8a841acff --- /dev/null +++ b/test/test_shutdown_no_client.c @@ -0,0 +1,35 @@ +/** + * @file test_shutdown_no_client.c + * Regression test for Issue #704: + * Crash on rfbShutdownServer() when screen->httpDir is NULL and no client connected. + */ + +#include +#include +#include + +int main(int argc, char **argv) +{ + rfbScreenInfoPtr screen = rfbGetScreen(&argc, argv, 100, 100, 8, 3, 4); + if (!screen) { + fprintf(stderr, "Failed to initialize rfbScreen\n"); + return 1; + } + + screen->frameBuffer = (char *)calloc(100 * 100 * 4, 1); + if (!screen->frameBuffer) { + rfbScreenCleanup(screen); + return 1; + } + + screen->httpDir = NULL; /* Explicitly NULL as reported in issue #704 */ + rfbInitServer(screen); + + /* Verify safe shutdown with no client connected */ + rfbShutdownServer(screen, TRUE); + rfbScreenCleanup(screen); + free(screen->frameBuffer); + + printf("Issue #704 regression test passed successfully.\n"); + return 0; +}