Index: trunk/src/plgradient.c
===================================================================
--- trunk/src/plgradient.c	(revision 11384)
+++ trunk/src/plgradient.c	(working copy)
@@ -3,6 +3,9 @@
 //      Implement linear gradients for PLplot.
 //
 // Copyright (C) 2009  Alan W. Irwin
+// 2010-12-23, José Luis García Pallero, jgpallero@gmail.com
+//             Change static vectors of length PL_MAXPOLY to dynamic via
+//             malloc/free functions
 //
 // This file is part of PLplot.
 //
@@ -78,7 +81,8 @@
     {
       #define NGRAD    2
         int   i, irot_min, irot_max;
-        PLINT xpoly[PL_MAXPOLY], ypoly[PL_MAXPOLY];
+        PLINT _xpoly[PL_MAXPOLY], _ypoly[PL_MAXPOLY];
+        PLINT *xpoly, *ypoly;
         PLINT xgrad[NGRAD], ygrad[NGRAD], clpxmi, clpxma, clpymi, clpyma;
         PLFLT dxgrad[NGRAD], dygrad[NGRAD], xrot, xrot_min, xrot_max;
 
@@ -126,12 +130,20 @@
         plsc->ygradient = ygrad;
         plsc->ngradient = NGRAD;
 
-
         if ( n > PL_MAXPOLY - 1 )
         {
-            plwarn( "plgradient: too many points in polygon" );
-            n = PL_MAXPOLY;
+            if ( ( ( xpoly = (PLINT *) malloc( ( n + 1 ) * sizeof( PLINT ) ) ) == NULL ) ||
+                 ( ( ypoly = (PLINT *) malloc( ( n + 1 ) * sizeof( PLINT ) ) ) == NULL ) )
+            {
+                plexit ( "plgradient: Out of memory!" );
+            }
         }
+        else
+        {
+            xpoly = _xpoly;
+            ypoly = _ypoly;
+        }
+
         for ( i = 0; i < n; i++ )
         {
             xpoly[i] = plP_wcpcx( x[i] );
@@ -139,8 +151,7 @@
         }
         if ( x[0] != x[n - 1] || y[0] != y[n - 1] )
         {
-            if ( n < PL_MAXPOLY )
-                n++;
+            n++;
             xpoly[n - 1] = plP_wcpcx( x[0] );
             ypoly[n - 1] = plP_wcpcy( y[0] );
         }
@@ -149,6 +160,12 @@
         // Plot line corresponding to gradient to give visual
         // debugging cue.
         plline( NGRAD, dxgrad, dygrad );
+
+        if ( n > PL_MAXPOLY - 1 )
+        {
+            free(xpoly);
+            free(ypoly);
+        }
     }
 }
 
