为什么libxml不允许我创建具有base64文本内容的节点?

用户名

我正在使用libxml2创建一个包含C语言中base64编码文本的xml文档。但是,当我尝试添加一个包含base64编码的元素,然后打印xml时,该元素为空。我还添加了printf来检查编码是否已完成并已打印。

这是我的程序:

xmlChar* createImportPKCS12Xml(char* userId, char* pkcs12, char* password, char* passwordForPkcs12) {
    xmlNodePtr personElem;
    xmlNodePtr userIdElem;
    xmlNodePtr pkcs12Elem;
    xmlNodePtr passwordElem;
    xmlNodePtr pkcs12PasswordElem;
    xmlDocPtr doc;
    xmlNodePtr root_node;
    xmlChar *xmlbuff;
    int buffersize;

    doc = xmlNewDoc(BAD_CAST "1.0");
    root_node = xmlNewNode(NULL, BAD_CAST "root");
    xmlDocSetRootElement(doc, root_node);
    root_node = xmlDocGetRootElement(doc);

    char* base = toBase64("abdsd");
    printf(base);

    personElem = xmlNewChild(root_node, NULL, BAD_CAST PERSON_ELEM, NULL);
    userIdElem = xmlNewChild(personElem, NULL, BAD_CAST USER_ID_ELEM, BAD_CAST userId);
    pkcs12Elem = xmlNewChild(root_node, NULL, BAD_CAST PKCS12_ELEM, BAD_CAST base);
    passwordElem = xmlNewChild(root_node, NULL, BAD_CAST PASSWORD_ELEM, BAD_CAST password);
    pkcs12PasswordElem = xmlNewChild(root_node, NULL, BAD_CAST PKCS12_PASSWORD_ELEM, BAD_CAST passwordForPkcs12);
    if ((personElem == NULL)
            || (userIdElem == NULL)
            || (passwordElem == NULL)
            || (pkcs12PasswordElem == NULL)
            || (pkcs12Elem == NULL)) {
        exit(EXIT_FAILURE);
    }
    xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);

    xmlFreeDoc(doc);
    xmlCleanupParser();

    return xmlbuff;
} 

对于base64编码,我正在使用openssl:

char* toBase64(char* str) {
    BIO *bio, *b64;
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new_fp(stdout, BIO_NOCLOSE);
    BIO_push(b64, bio);
    BIO_write(b64, str, strlen(str));
    BIO_flush(b64);
    char* output = NULL;
    int sz = BIO_get_mem_data(b64, &output);
    BIO_free_all(b64);
    return output;
}

使用普通文字没有问题。有人有同样的问题并且可以提供帮助吗?还是有人可以建议使用libxml2做到这一点的另一种方式?

编辑1:问题出在toBase64函数中。更改后,一切正常:

char* toBase64(char* str) {
    BIO *bio, *b64;
    BUF_MEM *bufferPtr;

    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new(BIO_s_mem());
    bio = BIO_push(b64, bio);

    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Ignore newlines - write everything in one line
    BIO_write(bio, str, strlen(str));
    BIO_flush(bio);
    BIO_get_mem_ptr(bio, &bufferPtr);
    BIO_set_close(bio, BIO_NOCLOSE);
    BIO_free_all(bio);
        char* output;

    output=(*bufferPtr).data;
        return output;
}
放松

编码功能的尾部看起来很吓人:

char* output = NULL;
int sz = BIO_get_mem_data(b64, &output);
BIO_free_all(b64);
return output;

您确定之后的输出指针有效BIO_free_all()吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从具有base64编码内容的XML创建ZipArchive

来自分类Dev

为什么不允许从具有私有构造函数的类继承

来自分类Dev

为什么Windows不允许我粘贴PDF文件的多行文本来保存文件?

来自分类Dev

为什么Android Studio不允许我创建Java类?

来自分类Dev

为什么Eclipse不允许我正确创建子文件夹?

来自分类Dev

为什么Google Compute Engine不允许我创建图像?

来自分类Dev

为什么Eclipse不允许我正确创建子文件夹?

来自分类Dev

为什么Visual Studio 2013不允许我创建新的C ++ CLR类库?

来自分类Dev

为什么不允许使用具有不同数量的模板参数的类/结构声明?

来自分类Dev

为什么不允许使用具有不同数量的模板参数的类/结构声明?

来自分类Dev

为什么git不允许我删除远程分支

来自分类Dev

为什么NFS不允许我挂载共享?

来自分类Dev

为什么我收到“不允许张贴”信息(405)?

来自分类Dev

为什么Xcode不允许我使用presentViewController?

来自分类Dev

为什么我的XMLHttpRequest不允许XSS?

来自分类Dev

为什么NFS不允许我挂载共享?

来自分类Dev

为什么不允许我提供函数参数?

来自分类Dev

为什么我的htaccess不允许使用多个规则

来自分类Dev

为什么Xcode不允许我使用presentViewController?

来自分类Dev

为什么tensorflow不允许我写文件?

来自分类Dev

为什么Github Pages不允许我使用有效的HTML?

来自分类Dev

Python:为什么我的base64文件名编码不匹配应有的格式?

来自分类Dev

Python:为什么我的base64文件名编码不匹配应有的格式?

来自分类Dev

为什么不允许ReadWriteLock升级?

来自分类Dev

为什么不允许覆盖

来自分类Dev

为什么nhibernate不允许在具有身份标识符的无状态会话期间进行批量插入?

来自分类Dev

为什么float64允许NA,但int32不允许?

来自分类Dev

为什么fillRect命令不允许创建点击区域,而rect和fill的组合却允许呢?

来自分类Dev

我想在工作笔记本电脑上使用vim,但是我的公司不允许我们安装软件。我有什么选择?

Related 相关文章

  1. 1

    从具有base64编码内容的XML创建ZipArchive

  2. 2

    为什么不允许从具有私有构造函数的类继承

  3. 3

    为什么Windows不允许我粘贴PDF文件的多行文本来保存文件?

  4. 4

    为什么Android Studio不允许我创建Java类?

  5. 5

    为什么Eclipse不允许我正确创建子文件夹?

  6. 6

    为什么Google Compute Engine不允许我创建图像?

  7. 7

    为什么Eclipse不允许我正确创建子文件夹?

  8. 8

    为什么Visual Studio 2013不允许我创建新的C ++ CLR类库?

  9. 9

    为什么不允许使用具有不同数量的模板参数的类/结构声明?

  10. 10

    为什么不允许使用具有不同数量的模板参数的类/结构声明?

  11. 11

    为什么git不允许我删除远程分支

  12. 12

    为什么NFS不允许我挂载共享?

  13. 13

    为什么我收到“不允许张贴”信息(405)?

  14. 14

    为什么Xcode不允许我使用presentViewController?

  15. 15

    为什么我的XMLHttpRequest不允许XSS?

  16. 16

    为什么NFS不允许我挂载共享?

  17. 17

    为什么不允许我提供函数参数?

  18. 18

    为什么我的htaccess不允许使用多个规则

  19. 19

    为什么Xcode不允许我使用presentViewController?

  20. 20

    为什么tensorflow不允许我写文件?

  21. 21

    为什么Github Pages不允许我使用有效的HTML?

  22. 22

    Python:为什么我的base64文件名编码不匹配应有的格式?

  23. 23

    Python:为什么我的base64文件名编码不匹配应有的格式?

  24. 24

    为什么不允许ReadWriteLock升级?

  25. 25

    为什么不允许覆盖

  26. 26

    为什么nhibernate不允许在具有身份标识符的无状态会话期间进行批量插入?

  27. 27

    为什么float64允许NA,但int32不允许?

  28. 28

    为什么fillRect命令不允许创建点击区域,而rect和fill的组合却允许呢?

  29. 29

    我想在工作笔记本电脑上使用vim,但是我的公司不允许我们安装软件。我有什么选择?

热门标签

归档