Skip to content

Problems with upstream #2

Description

@informatimago

This is a pseudo-issue to inform about recent problematic evolution of upstream:

http://git.kpe.io/?p=cl-base64.git;a=summary

git clone http://git.kpe.io/cl-base64.git

Recently, upstream introduced incompatible changes:
The encoder and decoder API has been broken:

  • functions named BASE64-STRING-STRING have been renamed to BASE64-STRING-TO-STRING,
  • a bug in the creation of the symbols has been introduced by building the symbol name with FORMAT:
> (defmacro define-base64-decoder (hose sink)
>   `(defun ,(intern (format nil "~A-~A-~A-~A" '#:base64 hose '#:to sink))


< (defmacro def-base64-stream-to-* (output-type)
<   `(defun ,(intern (concatenate 'string (symbol-name :base64-stream-to-)
<                                 (symbol-name output-type)))

Which creates functions named |base64-string-to-string| instead of
BASE64-STRING-TO-STRING when *print-case* is set to:downcase (and
possibly with other results with other settings of the global
variables).

cl-user> (lspack :cl-base64 t)

CL-BASE64
   Symbols:         24 exported, 1098 total.
   Nicknames:     BASE64 
   Uses:          COMMON-LISP 
   Exported:      *URI-DECODE-TABLE* *URI-ENCODE-TABLE* 
                  +DECODE-TABLE+ +URI-DECODE-TABLE+ 
                  BAD-BASE64-CHARACTER BASE64-ERROR 
                  BASE64-STREAM-TO-INTEGER BASE64-STREAM-TO-STREAM 
                  BASE64-STREAM-TO-STRING BASE64-STREAM-TO-USB8-ARRAY 
                  BASE64-STRING-TO-INTEGER BASE64-STRING-TO-STREAM 
                  BASE64-STRING-TO-STRING BASE64-STRING-TO-USB8-ARRAY 
                  INCOMPLETE-BASE64-DATA INTEGER-TO-BASE64-STREAM 
                  INTEGER-TO-BASE64-STRING MAKE-DECODE-TABLE 
                  STREAM-TO-BASE64-STREAM STREAM-TO-BASE64-STRING 
                  STRING-TO-BASE64-STREAM STRING-TO-BASE64-STRING 
                  USB8-ARRAY-TO-BASE64-STREAM 
                  USB8-ARRAY-TO-BASE64-STRING
nil
cl-user> (apropos "BASE64-STRING-TO-STRING")
cl-base64:base64-string-to-string        
cl-base64::|base64-string-to-string|   F 
         :base64-string-to-string     V  :base64-string-to-string
; No value
cl-user>

Furthermore, the current quicklisp release (2021-06-30), contains an intermediate stage where the bug of interning with format is introduced, but the renaming is not yet (despite the last commit on the upstream dated 2020-09-30).

Hunchentoot uses the old API, ie. is compatible with our version, but not with the current one in quicklisp.

Have fun!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions