`
CharlesCui
  • 浏览: 427359 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

libsmtp--库的一个bug

阅读更多

http://libsmtp.sourceforge.net/

 

用纯C写的smtp客户端已经很少了,更重要的是性能要好,不要有太多附加的东西,只需要完成smtp主要协议就行,

我还是很喜欢这个项目的,我用它做smtp邮件系统的性能测试,可惜好久没更新了。

 

file:plg_login.c

 

    /* username */
    usr = (char*)malloc_ (2*strlen (srv->username)+4);
    siz = alg_b64_encode (srv->username, strlen (srv->username), usr);

    if (smtp_write (srv, usr, siz) == -1)
    {
        free_ (usr, NULL);
        return (-1); /* error msg is already set */
    }
   
    if ((rsp = smtp_read_response_ (srv, 1)) == NULL)
    {
        free_ (usr, NULL);
        return (-1); /* error msg is already set */
    }
    free_ (rsp, usr, NULL);

    /* password */
    pwd = (char*)malloc_ (2*strlen (srv->password)+4);
    siz = alg_b64_encode (srv->password, strlen (srv->password), pwd);

    if (smtp_write (srv, pwd, siz) == -1)
    {
        free_ (pwd, NULL);
        return (-1); /* error msg is already set */
    }
   
    if ((rsp = smtp_read_response_ (srv, 1)) == NULL)
    {
        free_ (pwd, NULL);
        return (-1); /* error msg is already set */
    }
//    free_ (rsp, usr, NULL);
/*
change usr to pwd.
*/
      free_ (rsp, pwd, NULL);

 

释放指针的时候对usr释放了两次,导致系统报错double free。

第二次usr释放应该改为释放pwd。

 

分享到:
评论
7 楼 yuanliangwu 2011-04-12  
魔力猫咪 写道
很多开源库都是大家在业余时间根据自己的兴趣编写的。很多都是靠业余时间自行维护。如果一个库没能获得足够的关注,那么一段时间以后,就很可能不维护了。
我的仓库猫就是这样,没人用没人反馈,自己平时也用不到,当初完全是因为一篇文章引发的兴趣完成的。久了就没兴趣维护了。
开源界的很多东西就是这样,好的非常好,有很多人维护。甚至有大公司专门贡献代码。没人关注的就很差,投入不足,结果质量不好。质量不好,更加没人关注,恶性循环。

6 楼 yuanliangwu 2011-04-12  
受益匪浅了
5 楼 yuanliangwu 2011-04-12  
好文章,谢谢.
4 楼 CharlesCui 2011-04-08  
嗯,是的,希望以后程序员是第一批实现共产主义,要什么有什么的人,

然后大家用数不尽的业余时间去重构自己的开源项目,让用的人也放心。
3 楼 魔力猫咪 2011-04-08  
很多开源库都是大家在业余时间根据自己的兴趣编写的。很多都是靠业余时间自行维护。如果一个库没能获得足够的关注,那么一段时间以后,就很可能不维护了。
我的仓库猫就是这样,没人用没人反馈,自己平时也用不到,当初完全是因为一篇文章引发的兴趣完成的。久了就没兴趣维护了。
开源界的很多东西就是这样,好的非常好,有很多人维护。甚至有大公司专门贡献代码。没人关注的就很差,投入不足,结果质量不好。质量不好,更加没人关注,恶性循环。
2 楼 CharlesCui 2011-04-08  
哦。谢谢提醒。


呵呵,我发邮件告诉原作者。

最近用第三方库发现很多bug,还很低级。
尤其是Ruby写的库,质量要比C库差很多。
我是一边理解一边改,小东西的话真不如自己写了。

sf之类网站应该有个像淘宝那种打分或点评的机制,差的库让大家一看评分就知道。
1 楼 matrowang 2011-04-07  
楼主你应该在那个网站下面发文,告知bug,这样可以帮助更多的人。

相关推荐

    Python库 | bugbug-0.0.14-py3-none-any.whl

    "bugbug-0.0.14-py3-none-any.whl" 是一个Python库的发行版本,它是一个名为“bugbug”的库,版本号为0.0.14,专为Python 3构建。这个.whl文件是一种预编译的Python分发格式,旨在简化安装过程,使得用户可以直接...

    polyspace-bug-finder-results-bug-finder

    标题“polyspace-bug-finder-results-bug-finder”指的是Polyspace Bug Finder工具的结果展示。Polyspace Bug Finder是一种嵌入式软件静态分析测试工具,主要用于在Matlab环境下,帮助开发者检测代码中潜在的错误和...

    Go-git-bug嵌入在Git中的分布式bug跟踪器

    - `MichaelMure-git-bug-8d7a2c0`可能是指一个特定版本的源码压缩包,包含了`git-bug`项目的源代码,用户可以通过编译和安装来使用这个工具。 - `git-bug`可以与常见的开发环境和IDE集成,例如通过配置Git钩子或...

    Python库 | bugbug-0.0.350-py3-none-any.whl

    Python库“bugbug-0.0.350-py3-none-any.whl”是一个用于Python开发的软件包,特别适合后端应用。这个压缩包是Python生态系统中的一个wheel文件,它是一种预编译的Python分发包格式,旨在简化安装过程,提高效率。在...

    Python库 | bugbug-0.0.50-py3-none-any.whl

    6. **版本控制**:Python库通常会使用版本控制系统(如Git)进行源代码管理,每次更新都会对应一个版本号,遵循 Semantic Versioning (语义化版本) 规范。 7. **发布与分发**:发布Python库通常通过PyPI(Python ...

    swift-Buglife-一个很棒的iOS应用bug报告SDK和Web平台

    Swift-Buglife 是一款专为iOS开发者设计的强大bug报告SDK和服务平台,它旨在简化移动应用的错误检测和修复过程。通过集成Buglife SDK到您的应用程序,您可以轻松地收集、管理和解决用户遇到的问题,从而提高应用的...

    bug-free bug管理系统

    "Bug-Free Bug管理系统"是一款基于...综上,"Bug-Free Bug管理系统"是一个实用且灵活的工具,能够有效地提升软件开发的质量和效率。通过合理的使用和适当的定制,它不仅可以帮助管理bug,还能成为项目管理的有效助手。

    buster-amd-static-bug-源码.rar

    【压缩包子文件的文件名称列表】"buster-amd-static-bug-源码.zip" 表明压缩包内的主要文件可能是"buster-amd-static-bug-源码",这可能是一个项目或者库的源代码目录,其中可能包含以下结构: 1. **src** - 存放...

    cat2bug-jlog Java错误日志收集框架

    总结,cat2bug-jlog是Java开发领域的一个强大工具,它通过实时收集、智能分类和详尽统计等功能,提升了企业应用的运维效率。了解并掌握cat2bug-jlog的使用,无疑能帮助开发者更好地应对复杂的应用场景,实现高效的...

    Python库 | bugbug-0.0.401.tar.gz

    Python库是开发者在编程...理解和使用这样一个库,不仅需要对Python语言有深入的理解,还需要熟悉Python的包管理和模块导入机制,以及相关的调试技巧。在实际应用中,合理利用这样的库能够显著提升开发效率和代码质量。

    Python库 | bugbug-0.0.444.tar.gz

    Python库“bugbug-0.0.444.tar.gz”是一个用于开发的软件包,主要面向使用Python作为后端编程语言的开发者。这个压缩包包含版本号为0.0.444的bugbug库,它很可能是一个用于调试、错误检测或者问题追踪的工具。在...

    designer-bug-20120525

    【标题】"designer-bug-20120525" 指的是一个特定版本的设计师工具(Designer)在2012年5月25日时的修复更新,主要关注的是修复其中的一些错误或问题。在这个版本中,开发团队针对用户反馈和系统监控到的异常进行了...

    PyPI 官网下载 | bugbug-0.0.146-py3-none-any.whl

    "bugbug-0.0.146-py3-none-any.whl" 是一个从PyPI官网下载的特定版本的Python库,这个文件是用于方便快速安装的预编译的轮子(wheel)格式。 **轮子(Wheel)格式** 轮子是Python的二进制分发格式,旨在提高Python...

    graphics.h图形库源码winBGIm(bug-free).rar

    winBGIm(Windows-based Graphics and Input for Beginners)是基于Windows的一个图形用户界面库,它不仅包含了"graphics.h"的大部分功能,而且还解决了旧库的一些问题,因此被称为“bug-free”。winBGIm支持彩色...

    PyPI 官网下载 | bugbug-0.0.355-py3-none-any.whl

    本文将深入探讨PyPI官网下载的资源——"bugbug-0.0.355-py3-none-any.whl",这是一个Python库,对于理解和使用Python编程具有重要意义。 首先,让我们了解什么是.whl文件。在Python中,whl(wheel)是一种预编译的...

    bugu-mongo

    Bugu-Mongo是基于MongoDB开发的一个框架,版本1.12提供了一系列优化和增强,旨在提升开发效率和数据库性能。本文将深入探讨Bugu-Mongo 1.12的关键特性、使用场景以及最佳实践。 一、Bugu-Mongo概述 Bugu-Mongo是一...

    Python库 | bugbug-0.0.57-py3-none-any.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:bugbug-0.0.57-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    ext-bug-fix-guig

    总的来说,"ext-bug-fix-guig"代表了一个专业的IT实践过程,展示了开发者如何通过对源代码的仔细审查和改进来提升软件质量。这个过程对于维护Linux系统的健康运行至关重要,也体现了开源社区协作修复问题的精神。...

    Laravel开发-lara-bug

    "Lara-Bug"是针对Laravel框架的一个错误通知服务,它提供了方便的方式来管理和追踪应用程序中的异常。在本篇文章中,我们将深入探讨Lara-Bug在Laravel开发中的作用、安装与配置,以及如何利用它来提升你的开发流程。...

Global site tag (gtag.js) - Google Analytics