Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 May 2013 22:41:42 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r318802 - in head/security/cryptopp: . files
Message-ID:  <201305222241.r4MMfg7x001140@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: delphij
Date: Wed May 22 22:41:42 2013
New Revision: 318802
URL: http://svnweb.freebsd.org/changeset/ports/318802

Log:
  This changeset fixes two issues with crypto++ library:
  
   * patch-misc.h
  
     This fixes a warning triggered by testing an unsigned parameter against
     0.  The patch solves this by creating a different template for signed
     case.
  
   * patch-nbtheory.cpp
  
     This is a workaround for a bug with the current version of libc++ shipped
     with FreeBSD 9.x, which causes an infinite loop when generating RSA key,
     possibly also other operations.
  
  PR:		ports/178827
  Submitted by:	Michael Gmelin <freebsd grem de>

Added:
  head/security/cryptopp/files/patch-misc.h   (contents, props changed)
  head/security/cryptopp/files/patch-nbtheory.cpp   (contents, props changed)
Modified:
  head/security/cryptopp/Makefile

Modified: head/security/cryptopp/Makefile
==============================================================================
--- head/security/cryptopp/Makefile	Wed May 22 22:21:52 2013	(r318801)
+++ head/security/cryptopp/Makefile	Wed May 22 22:41:42 2013	(r318802)
@@ -3,7 +3,7 @@
 
 PORTNAME=		cryptopp
 PORTVERSION=		5.6.1
-PORTREVISION=		2
+PORTREVISION=		3
 CATEGORIES=		security
 MASTER_SITES=		SF \
 			http://www.cryptopp.com/

Added: head/security/cryptopp/files/patch-misc.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/cryptopp/files/patch-misc.h	Wed May 22 22:41:42 2013	(r318802)
@@ -0,0 +1,54 @@
+--- misc.h.orig	2010-08-06 18:46:18.000000000 +0000
++++ misc.h	2013-05-22 08:43:01.949194748 +0000
+@@ -405,17 +405,13 @@
+ 	return order == GetNativeByteOrder();
+ }
+ 
++template<bool> struct IsUnsigned {};
++
+ template <class T>
+-std::string IntToString(T a, unsigned int base = 10)
++std::string IntToStringImpl(T a, unsigned int base, IsUnsigned<true>)
+ {
+ 	if (a == 0)
+ 		return "0";
+-	bool negate = false;
+-	if (a < 0)
+-	{
+-		negate = true;
+-		a = 0-a;	// VC .NET does not like -a
+-	}
+ 	std::string result;
+ 	while (a > 0)
+ 	{
+@@ -423,11 +419,30 @@
+ 		result = char((digit < 10 ? '0' : ('a' - 10)) + digit) + result;
+ 		a /= base;
+ 	}
++	return result;
++}
++
++template <class T>
++std::string IntToStringImpl(T a, unsigned int base, IsUnsigned<false>)
++{
++	bool negate = false;
++	if (a < 0)
++	{
++		negate = true;
++		a = 0-a;	// VC .NET does not like -a
++	}
++	std::string result = IntToStringImpl(a, base, IsUnsigned<true>());
+ 	if (negate)
+ 		result = "-" + result;
+ 	return result;
+ }
+ 
++template <class T>
++std::string IntToString(T a, unsigned int base = 10)
++{
++	return IntToStringImpl(a, base, IsUnsigned<(static_cast<T>(-1) > 0)>());
++}
++
+ template <class T1, class T2>
+ inline T1 SaturatingSubtract(const T1 &a, const T2 &b)
+ {

Added: head/security/cryptopp/files/patch-nbtheory.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/security/cryptopp/files/patch-nbtheory.cpp	Wed May 22 22:41:42 2013	(r318802)
@@ -0,0 +1,21 @@
+--- nbtheory.cpp.orig	2013-05-22 00:16:26.761193859 +0000
++++ nbtheory.cpp	2013-05-22 00:15:29.401256454 +0000
+@@ -307,7 +307,18 @@
+ 
+ bool PrimeSieve::NextCandidate(Integer &c)
+ {
++#if defined(__clang__) && defined(_LIBCPP_VERSION) &&  _LIBCPP_VERSION < 1101
++	// Workaround for a bug in libc++ in std::find on std::vector<bool>
++	std::vector<bool>::iterator pos = m_sieve.begin()+m_next;
++	for (std::vector<bool>::iterator end = m_sieve.end(); pos != end; ++pos)
++	{
++		if (*pos == false)
++			break;
++	}
++	bool safe = SafeConvert(pos - m_sieve.begin(), m_next);
++#else
+ 	bool safe = SafeConvert(std::find(m_sieve.begin()+m_next, m_sieve.end(), false) - m_sieve.begin(), m_next);
++#endif
+ 	assert(safe);
+ 	if (m_next == m_sieve.size())
+ 	{



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201305222241.r4MMfg7x001140>