unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Jean Louis <bugs@gnu.support>
To: Eli Zaretskii <eliz@gnu.org>
Cc: help-gnu-emacs@gnu.org
Subject: Re: Printf and quoting in general, SQL injection in particular [was: Emacs Modular Configuration: the preferable way]
Date: Tue, 22 Jun 2021 21:01:59 +0300	[thread overview]
Message-ID: <YNIllw7jInDKy6A7@protected.localdomain> (raw)
In-Reply-To: <83y2b1ubqt.fsf@gnu.org>

* Eli Zaretskii <eliz@gnu.org> [2021-06-22 19:14]:
> And my point is that it is dangerous (a.k.a. "wrong") using string
> functions on file names when there are specially-designed file-name
> functions for those use cases.  Because those special-purpose
> functions are there for a reason, and disregarding those reasons is
> asking for trouble.  Like using string comparison for comparing file
> names: that was actually a reason for quite a few bugs in our code.
> My point was trying to prevent people from making those same mistakes.

I agree that dedicated file functions should be used whenever
possible. Now I am looking in some of my functions to review that:

People have their ID number, so directory may exist for each
person. But I cannot see a possibility to work with file paths that
are structured without using string functions. I can maybe verify if
some possible string represents directory or file, if it exists or if
it is readable, but more than that, I would not know practically what
to do.

Maybe my scope of using such generated file paths is out of the
mentioned scope.

To summarize, it is better to use file related functions whenever
possible, checking if it is directory, using functions like
`file-name-as-directory' and so on. 

Avoiding string functions related to files seem to be now impossible.

Like here below I have to `concat' or concatenate directory with
the file base name, as when I do "filing" it is rather filed by
year/month/date and either `concat' or format' has to be used.

    (dolist (file files)
      (let* ((basename (file-name-nondirectory file))
	     (target (concat date-dir basename))
	     (target (rcd-unique-file-name target)))
	(if (file-exists-p file)
	    (progn
	      (message (format "cf/file-by-contact: moving \"%s\" to \"%s\"" file target))
	      (rename-file file target))
	  (error (format "File does not exist: %s" file)))))))

(defun cf-directory-by-id (id)
  "Opens the dired directory for ID"
  (let* ((dir (dir-id id)))
    (unless (file-directory-p dir)
      (make-dir-id id))
    (dired dir)))

(defun dir-id (id)
  "Returns directory for contact ID"
  (format "%s/%s/" (rcd-crm-directory-by-id) id))

(defun rcd-crm-directory-by-id ()
  (concat (rcd-crm-directory) "/" (cadr (rcd-crm-directory-data))))

(defun rcd-crm-directory-data ()
  "Returns default CRM related directories"
  (let* ((sql "SELECT defaults_crmdir, defaults_crmbyid, defaults_crmbyname, defaults_crmdiraccount FROM defaults")
	 (dirs (rcd-sql-first sql cf-db)) 
	 (crmdir (aref dirs 0))
	 (crmbyid (aref dirs 1))
	 (crmbyname (aref dirs 2))
	 (crmdiraccount (aref dirs 3)))
    (list crmdir crmbyid crmbyname crmdiraccount)))

(defun rcd-crm-directory ()
  (car (rcd-crm-directory-data)))

(defun rcd-crm-directory-by-id ()
  (concat (rcd-crm-directory) "/" (cadr (rcd-crm-directory-data))))


I can now think of safer functions something like: `file-concat'
that could or make sure that concatenated directories and file on
the end exist or not.




  reply	other threads:[~2021-06-22 18:01 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-21  1:40 Emacs Modular Configuration: the preferable way Hongyi Zhao
2021-06-21  2:56 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21  6:40   ` Jean Louis
2021-06-21 16:31     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 19:55       ` Jean Louis
2021-06-22  0:06         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 10:14   ` Arthur Miller
2021-06-21 16:40     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 18:25       ` [External] : " Drew Adams
2021-06-26  0:17         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-26  0:31           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 18:38       ` Arthur Miller
2021-06-22  0:03         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-22  0:17           ` Jean Louis
2021-06-22  7:52           ` Arthur Miller
2021-06-26  6:58             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 11:29   ` Eli Zaretskii
2021-06-21 12:45     ` Philip Kaludercic
2021-06-21 12:55       ` Eli Zaretskii
2021-06-21 13:59         ` [External] : " Drew Adams
2021-06-21 16:51           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 18:08             ` Eli Zaretskii
2021-06-21 18:26             ` FW: " Drew Adams
2021-06-26  0:06               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 14:11       ` tomas
2021-06-21 16:47         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 18:06           ` Eli Zaretskii
2021-06-21 21:09             ` Jean Louis
2021-06-22 11:45               ` Eli Zaretskii
2021-06-22 12:29                 ` Jean Louis
2021-06-22 13:07                   ` Eli Zaretskii
2021-06-21 20:05           ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-06-22  0:16             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 21:07           ` Jean Louis
2021-06-22  0:33             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-22  0:52               ` Printf and quoting in general, SQL injection in particular Jean Louis
2021-06-26  6:50                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-26  7:30                   ` Yuri Khan
2021-06-26  7:57                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-26  9:37                     ` tomas
2021-06-28  7:02                   ` Jean Louis
2021-07-06  2:12                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-07-06  2:46                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 20:36         ` Emacs Modular Configuration: the preferable way Jean Louis
2021-06-21 21:15           ` Printf and quoting in general, SQL injection in particular [was: Emacs Modular Configuration: the preferable way] tomas
2021-06-21 21:29             ` Jean Louis
2021-06-22  0:31               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-22  0:47                 ` Jean Louis
2021-06-26  6:31                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-28  6:56                     ` Jean Louis
2021-07-06  1:57                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-07-06 20:04                         ` Jean Louis
2021-07-06 20:19                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-22  0:23             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-22 12:12               ` Eli Zaretskii
2021-06-22 12:37                 ` Jean Louis
2021-06-22 13:10                   ` Eli Zaretskii
2021-06-22 15:45                     ` Jean Louis
2021-06-22 16:04                       ` Eli Zaretskii
2021-06-22 18:01                         ` Jean Louis [this message]
2021-06-22 18:25                           ` Eli Zaretskii
2021-06-26  6:46                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-26  7:15                             ` Eli Zaretskii
2021-06-28  7:04                               ` Jean Louis
2021-07-06  2:05                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-07-06 20:09                                   ` Jean Louis
2021-07-06 20:23                                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-07-07  0:00                                       ` Jean Louis
2021-06-28  6:59                             ` Jean Louis
2021-07-06  2:02                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-07-06 20:06                                 ` Jean Louis
2021-07-06 20:20                                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-26  6:41                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-26  6:39                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 16:42       ` Emacs Modular Configuration: the preferable way Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-22 12:50       ` Lars Ingebrigtsen
2021-06-26  8:05         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-21 20:02   ` Jean Louis
2021-06-22  0:11     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-06-22  0:19       ` Jean Louis
2021-06-21  6:37 ` Jean Louis
2021-06-21  7:00   ` Hongyi Zhao
2021-06-21 10:06     ` Arthur Miller
2021-06-21 10:26       ` Hongyi Zhao
2021-06-21 11:10         ` Arthur Miller
2021-06-23  2:17           ` Hongyi Zhao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YNIllw7jInDKy6A7@protected.localdomain \
    --to=bugs@gnu.support \
    --cc=eliz@gnu.org \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).