Skip to content
Snippets Groups Projects
Commit f9327d2f authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Plug some leaks.

parent 4df9c658
Branches
Tags
No related merge requests found
...@@ -737,8 +737,10 @@ find_lib(sbbs_t *sbbs, const char *path) ...@@ -737,8 +737,10 @@ find_lib(sbbs_t *sbbs, const char *path)
if (!can_user_access_lib(&sbbs->cfg, l, &sbbs->useron, &sbbs->client)) if (!can_user_access_lib(&sbbs->cfg, l, &sbbs->useron, &sbbs->client))
continue; continue;
exp = expand_slash(sbbs->cfg.lib[l]->lname); exp = expand_slash(sbbs->cfg.lib[l]->lname);
if (exp == nullptr) if (exp == nullptr) {
free(p);
return -1; return -1;
}
if (strcmp(p, exp)) { if (strcmp(p, exp)) {
free(exp); free(exp);
continue; continue;
...@@ -875,6 +877,12 @@ get_attrs(sbbs_t *sbbs, const char *path, char **link) ...@@ -875,6 +877,12 @@ get_attrs(sbbs_t *sbbs, const char *path, char **link)
return ret; return ret;
} }
static sftp_file_attr_t
get_attrs(sbbs_t *sbbs, const char *path)
{
return get_attrs(sbbs, path, nullptr);
}
static void static void
copy_path(char *p, const char *fp) copy_path(char *p, const char *fp)
{ {
...@@ -929,7 +937,9 @@ generic_dot_entry(sbbs_t *sbbs, char *fname, const char *path, int32_t *idx) ...@@ -929,7 +937,9 @@ generic_dot_entry(sbbs_t *sbbs, char *fname, const char *path, int32_t *idx)
{ {
char *link; char *link;
sftp_file_attr_t attr = get_attrs(sbbs, path, &link); sftp_file_attr_t attr = get_attrs(sbbs, path, &link);
return generic_dot_attr_entry(sbbs, fname, attr, &link, idx); bool ret = generic_dot_attr_entry(sbbs, fname, attr, &link, idx);
free(link);
return ret;
} }
static bool static bool
...@@ -1421,9 +1431,12 @@ sftp_readdir(sftp_dirhandle_t handle, void *cb_data) ...@@ -1421,9 +1431,12 @@ sftp_readdir(sftp_dirhandle_t handle, void *cb_data)
sprintf(tmppath, static_files[dd->info.rootdir.idx].sftp_patt, sbbs->useron.alias); sprintf(tmppath, static_files[dd->info.rootdir.idx].sftp_patt, sbbs->useron.alias);
remove_trailing_slash(tmppath); remove_trailing_slash(tmppath);
attr = get_attrs(sbbs, tmppath, &link); attr = get_attrs(sbbs, tmppath, &link);
if (attr == nullptr) if (attr == nullptr) {
free(link);
return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Attributes allocation failure"); return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Attributes allocation failure");
}
lname = get_longname(sbbs, tmppath, link, attr); lname = get_longname(sbbs, tmppath, link, attr);
free(link);
if (lname == nullptr) { if (lname == nullptr) {
sftp_fattr_free(attr); sftp_fattr_free(attr);
return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Longname allocation failure"); return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Longname allocation failure");
...@@ -1514,8 +1527,10 @@ sftp_readdir(sftp_dirhandle_t handle, void *cb_data) ...@@ -1514,8 +1527,10 @@ sftp_readdir(sftp_dirhandle_t handle, void *cb_data)
if (attr == nullptr) if (attr == nullptr)
return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Attributes allocation failure"); return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Attributes allocation failure");
ename = expand_slash(sbbs->cfg.dir[dd->info.filebase.idx]->lname); ename = expand_slash(sbbs->cfg.dir[dd->info.filebase.idx]->lname);
if (ename == nullptr) if (ename == nullptr) {
sftp_fattr_free(attr);
return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "EName allocation failure"); return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "EName allocation failure");
}
lname = get_longname(sbbs, ename, nullptr, attr); lname = get_longname(sbbs, ename, nullptr, attr);
if (lname == nullptr) { if (lname == nullptr) {
free(ename); free(ename);
...@@ -1648,7 +1663,7 @@ sftp_stat(sftp_str_t path, void *cb_data) ...@@ -1648,7 +1663,7 @@ sftp_stat(sftp_str_t path, void *cb_data)
return newpmap->cleanup(); return newpmap->cleanup();
cpmap = std::move(newpmap); cpmap = std::move(newpmap);
} }
sftp_file_attr_t attr = get_attrs(sbbs, cpmap->sftp_path, nullptr); sftp_file_attr_t attr = get_attrs(sbbs, cpmap->sftp_path);
if (attr == nullptr) if (attr == nullptr)
return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Unable to allocate attribute"); return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Unable to allocate attribute");
bool ret = sftps_send_attrs(sbbs->sftp_state, attr); bool ret = sftps_send_attrs(sbbs->sftp_state, attr);
...@@ -1665,7 +1680,7 @@ sftp_lstat(sftp_str_t path, void *cb_data) ...@@ -1665,7 +1680,7 @@ sftp_lstat(sftp_str_t path, void *cb_data)
path_map pmap(sbbs, path->c_str, MAP_STAT); path_map pmap(sbbs, path->c_str, MAP_STAT);
if (!pmap.success()) if (!pmap.success())
return pmap.cleanup(); return pmap.cleanup();
sftp_file_attr_t attr = get_attrs(sbbs, pmap.sftp_path, nullptr); sftp_file_attr_t attr = get_attrs(sbbs, pmap.sftp_path);
if (attr == nullptr) if (attr == nullptr)
return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Unable to allocate attribute"); return sftps_send_error(sbbs->sftp_state, SSH_FX_FAILURE, "Unable to allocate attribute");
bool ret = sftps_send_attrs(sbbs->sftp_state, attr); bool ret = sftps_send_attrs(sbbs->sftp_state, attr);
......
...@@ -65,20 +65,24 @@ s_open(sftps_state_t state) ...@@ -65,20 +65,24 @@ s_open(sftps_state_t state)
if (!(flags & SSH_FXF_WRITE)) { if (!(flags & SSH_FXF_WRITE)) {
if (flags & SSH_FXF_CREAT) { if (flags & SSH_FXF_CREAT) {
sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't create unless writing"); sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't create unless writing");
free_sftp_str(fname);
return true; return true;
} }
if (flags & SSH_FXF_APPEND) { if (flags & SSH_FXF_APPEND) {
sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't append unless writing"); sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't append unless writing");
free_sftp_str(fname);
return true; return true;
} }
} }
if (!(flags & SSH_FXF_CREAT)) { if (!(flags & SSH_FXF_CREAT)) {
if (flags & SSH_FXF_TRUNC) { if (flags & SSH_FXF_TRUNC) {
sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't truncate unless creating"); sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't truncate unless creating");
free_sftp_str(fname);
return true; return true;
} }
if (flags & SSH_FXF_EXCL) { if (flags & SSH_FXF_EXCL) {
sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't open exclisive unless creating"); sftps_send_error(state, SSH_FX_OP_UNSUPPORTED, "Can't open exclisive unless creating");
free_sftp_str(fname);
return true; return true;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment