AmendHub

Download:

jcs

/

subtext

/

amendments

/

644

folder: Minor bug fixes


jcs made amendment 644 1 day ago
--- folder.c Sat Dec 6 21:43:56 2025 +++ folder.c Tue Sep 22 15:08:46 2026 @@ -145,6 +145,10 @@ folder_list(struct session *s) session_flush(s); for (n = 0; n < db->nfolders; n++) { + if (db->folders[n].restricted_viewing && + !(s->user && s->user->is_sysop)) + continue; + session_printf(s, "%2d %- 13.13s %s\r\n", n + 1, db->folders[n].name, @@ -210,10 +214,18 @@ folder_show(struct session *s, struct folder *folder) show_help = false; done = false; + if (folder->restricted_viewing && !(s->user && s->user->is_sysop)) { + session_printf(s, "Invalid folder\r\n"); + session_flush(s); + return; + } + snprintf(prompt, sizeof(prompt), "Files:%s", folder->name); while (!done && !s->ending) { if (find_files) { + if (file_ids != NULL) + xfree(&file_ids); folder_find_file_ids(folder, &nfile_ids, &file_ids); fpp = FILES_PER_PAGE; if (s->terminal_lines < fpp + 3) @@ -265,12 +277,14 @@ handle_opt: show_list = true; break; case '#': - if (fn < 1 || fn > nfile_ids) { + if (fn < 1 || fn > fpp || + (fpp * page) + fn > nfile_ids) { session_printf(s, "Invalid file\r\n"); session_flush(s); break; } - c = folder_file_view(s, folder, file_ids[fn - 1]); + c = folder_file_view(s, folder, + file_ids[(fpp * page) + fn - 1]); if (c == FILE_VIEW_RETURN_FIND) find_files = true; break; @@ -356,6 +370,12 @@ folder_upload(struct session *s, struct folder *folder return 0; } + if (folder->restricted_posting && !s->user->is_sysop) { + session_printf(s, "Uploading to this folder is not permitted.\r\n"); + session_flush(s); + return 0; + } + if (initial_filename) strlcpy(file.filename, initial_filename, sizeof(file.filename)); @@ -821,11 +841,17 @@ folder_find_file_ids(struct folder *folder, size_t *nf for (n = 0; (o = bile_get_nth_of_type(folder->bile, n, FOLDER_FILE_RTYPE)); n++) { - if (n >= *nfile_ids) + if (n >= *nfile_ids) { + xfree(&o); break; + } if (bile_read_alloc(folder->bile, FOLDER_FILE_RTYPE, o->id, - &data) == 0) + &data) == 0) { + if (data != NULL) + xfree(&data); + xfree(&o); break; + } ret = bile_unmarshall_object(folder->bile, folder_file_object_fields, nfolder_file_object_fields, data, o->size, &file, sizeof(file), false);