Est-il possible de copier des octets nuls (ASCII 0x00) dans le Presse-papiers de Windows?

9

Les octets nuls (ASCII 0x00) ne semblent pas pouvoir être copiés (Ctrl + C-capable) sous Windows. Pour en faire une démonstration, ouvrez la console de développement de votre navigateur et faites console.log('a\x00b'). Si vous essayez de copier-coller la chaîne résultante sur un ordinateur Windows 8 (et probablement aussi d'autres versions de Windows), vous constaterez que seul le a est copié. le \x00 et tout ce qui suit est ignoré.

Est-il possible de copier l'intégralité d'une chaîne contenant des octets nuls? Le presse-papiers peut-il même contenir des octets nuls?

(Question auxiliaire: Pourquoi les octets nuls ne peuvent-ils pas être copiés? Par exemple. Y a-t-il une raison liée à la sécurité, ou est-ce simplement que Windows est idiot?)

senshin
la source
bonne question .. être intéressant de voir si ça le met dans le presse-papier xxd peut produire des NULL C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
barlop
en utilisant unxutils gclip et pclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> & lt; - il m'est difficile de savoir si les valeurs nulles entrent dans le Presse-papiers .. ou si elles sont insérées mais pas collées
barlop
2
Quelque part dans la chaîne, un programme utilise des fonctions / représentations de chaîne terminées par un caractère nul (c'est-à-dire des fonctions de chaîne C). Très commun. Ma maigre compréhension de ce genre de choses est «oui»: l'incorporation de valeurs NULL peut poser des problèmes de sécurité, principalement en raison du risque d'erreur d'identification de la longueur de la chaîne et du débordement de la mémoire tampon (??).
Yorik
C'est un casse-tête: j'ai copié le contenu d'un fichier JPG dans le presse-papiers et, lorsque je l'ai relu, il a été tronqué au premier null, ce qui suggère que le presse-papiers est basé sur du texte. Pourtant, je peux effectuer un dump ou couper et coller des images entre des packages graphiques sans problème.
AFH
Je suppose que cela dépend du format utilisé. Presse-papiers prend en charge différents formats. Si vous copiez du texte, il est fort probable que les caractères nuls ne sont pas pris en charge car ils sont utilisés comme terminateur de chaîne. Si vous utilisez un format de Presse-papiers binaire, vous pouvez copier et coller des octets nuls.
Alexey Ivanov

Réponses:

7

Non, vous ne pouvez pas insérer de texte avec des caractères nuls incorporés dans le Presse-papiers. Regardons la liste des formats standard du presse-papier Windows . Il existe quelques formats qui contiennent des éléments généralement compris comme du texte:

  • CF_TEXT (1)
  • CF_OEMTEXT (7)
  • CF_UNICODETEXT (13)

Chacun de ceux-ci a cette phrase dans sa définition:

Un caractère nul indique la fin des données.

À présent, CF_UNICODETEXT conserve ses données au format UTF-16LE , donc il sera plus que probablement avoir une certaine octets , mais les caractères nuls (deux octets nuls dans une ligne, en gros) termineront toujours la chaîne.

Nous ne pouvons que spéculer sur la raison pour laquelle les caractères nuls ne sont pas autorisés dans le texte du presse-papiers, mais il est plus que probable que ce soit simplement parce que les fonctions de traitement de chaînes les plus couramment utilisées dans Windows supposent qu'un caractère nul indique la fin. La seule autre façon de savoir où une chaîne s'arrête serait de la préfixer avec sa longueur.

Vous pouvez conserver des graphiques dans le Presse-papiers même s’ils ont probablement des octets nuls, car ils sont transmis dans différents formats (par ex. CF_BITMAP ), qui doivent être compris différemment par les programmes.

Ben N
la source
Merci - bonne réponse. J'ai certainement appris de bonnes choses sur le presse-papiers de Windows.
senshin